当j有时为0时,如何避免不一致的s [i:-j]切片行为?

时间:2017-03-12 21:45:42

标签: python python-3.x slice

我正在创建列表[-WINDOW-i:-i]的多个切片,其中i的范围介于320之间:

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 个答案:

答案 0 :(得分:9)

Python切片中这个怪癖的一个解决方法是利用这些事实:

  1. false_ish_value or other_value始终评估为other_value
  2. 0是布尔上下文中唯一的false-ish整数
  3. s[n:None]相当于s[n:]
  4. 考虑到这些,您可以将切片写为:

    other_list[-WINDOW-i:(-i or None)]
    

    ...只有当[-WINDOW-i:None](因此[-WINDOW-i:])为i时,切片才会被解释为-i(与0相同)