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

Python 当j有时为0时,如何避免不一致的s[i:-j]切片行为?,python,python-3.x,slice,Python,Python 3.x,Slice,我正在创建一个列表的多个切片[-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:

我正在创建一个列表的多个切片
[-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])
…因为如果我有许多列表要附加到
VAL
,它会变得很混乱


有一种干净的方法可以做到这一点吗?

Python切片中这种怪癖的一种解决方法是利用以下事实:

  • false\u ish\u值或其他值
    始终计算为
    other\u值
  • 0
    是布尔上下文中唯一的整数
  • s[n:None]
    等同于
    s[n::][/code>
  • 考虑到这些因素,您可以将切片编写为:

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

    …只有当
    i
    (因此
    -i
    )为
    0
    时,切片才会被解释为
    [-WINDOW-i:None]
    (这与
    [-WINDOW-i:
    )相同。您可以添加输入和预期输出。