当 j 有时为 0 时,如何避免不一致的 s[i:-j] 切片行为?
Posted
技术标签:
【中文标题】当 j 有时为 0 时,如何避免不一致的 s[i:-j] 切片行为?【英文标题】:How to avoid inconsistent s[i:-j] slicing behaviour when j is sometimes 0? 【发布时间】:2017-08-02 21:01:16 【问题描述】:我正在创建列表的多个切片[-WINDOW-i:-i]
,其中i
介于32
和0
之间:
vals = []
for i in range(32, -1, -1):
vals.append(other_list[-WINDOW-i:-i])
i == 0
时,返回一个长度为 0 的切片:
other_list[-WINDOW-0:0]
我不想这样做来解决它:
vals = []
for i in range(32, -1, -1):
if i == 0:
vals.append(other_list[-WINDOW:])
else:
vals.append(other_list[-WINDOW-i:-i])
...因为如果我有很多列表要附加到vals
,它会变得一团糟。
有没有干净的方法来做到这一点?
【问题讨论】:
你能添加你的输入和预期输出吗? 【参考方案1】:解决 Python 切片中这种怪癖的一种解决方法是利用以下事实:
false_ish_value or other_value
总是评估为 other_value
0
是唯一一个在布尔上下文中为 false-ish 的整数
s[n:None]
等价于 s[n:]
考虑到这些,您可以将切片编写为:
other_list[-WINDOW-i:(-i or None)]
…只有当i
(因此-i
)为0
时,切片才会被解释为[-WINDOW-i:None]
(与[-WINDOW-i:]
相同)。
【讨论】:
以上是关于当 j 有时为 0 时,如何避免不一致的 s[i:-j] 切片行为?的主要内容,如果未能解决你的问题,请参考以下文章