如何允许第一个元素包含在反向切片中?
How to allow the first element to be included in a reverse slice?
我正在尝试弄清楚如何定义能够返回第一个元素的 slice
。
>>> x = list(range(100))
>>> s = slice(91, 100, 2)
>>> x[s]
[91, 93, 95, 97, 99] # Highest works fine.
>>> s = slice(10, -1, -2)
>>> x[s]
[] # Nope
>>> s = slice(10, 0, -2)
>>> x[s]
[10, 8, 6, 4, 2] # No zero
>>> 0 in x
True
你必须在这里使用 None
。您想要 x[10::-2]
等效切片为:
s = slice(10, None, -2)
x[s]
# [10, 8, 6, 4, 2, 0]
阅读此答案以充分理解 Python 中的切片是如何工作的:Understanding slice notation
让我们说 slice(start, stop, step)
来解释为什么你的其他示例不起作用
s = slice(10, 0, -2)
不包括 0
即第一个元素,因为在切片中我们采用直到 stop - 1
.
slice(10, -1, -2)
在使用负值切片时以不同的方式工作。负值表示从列表后面开始的值。因此,上面的切片将是 slice(10, len(x)-1, -2)
.
s = slice(91, 100, 2)
起作用是因为 99
的索引是 99
(x.index(99)
-> 99
) 而不是 100
。 99
低于 100
因此包含在内。
slice(91, 9999, 2)
会给出 [91, 93, 95, 97, 99]
,因为大于 len(x)
的值将被替换为 len(x)
。更多相关信息 Why does substring slicing with index out of range work?
我正在尝试弄清楚如何定义能够返回第一个元素的 slice
。
>>> x = list(range(100))
>>> s = slice(91, 100, 2)
>>> x[s]
[91, 93, 95, 97, 99] # Highest works fine.
>>> s = slice(10, -1, -2)
>>> x[s]
[] # Nope
>>> s = slice(10, 0, -2)
>>> x[s]
[10, 8, 6, 4, 2] # No zero
>>> 0 in x
True
你必须在这里使用 None
。您想要 x[10::-2]
等效切片为:
s = slice(10, None, -2)
x[s]
# [10, 8, 6, 4, 2, 0]
阅读此答案以充分理解 Python 中的切片是如何工作的:Understanding slice notation
让我们说 slice(start, stop, step)
来解释为什么你的其他示例不起作用
s = slice(10, 0, -2)
不包括0
即第一个元素,因为在切片中我们采用直到stop - 1
.slice(10, -1, -2)
在使用负值切片时以不同的方式工作。负值表示从列表后面开始的值。因此,上面的切片将是slice(10, len(x)-1, -2)
.s = slice(91, 100, 2)
起作用是因为99
的索引是99
(x.index(99)
->99
) 而不是100
。99
低于100
因此包含在内。slice(91, 9999, 2)
会给出[91, 93, 95, 97, 99]
,因为大于len(x)
的值将被替换为len(x)
。更多相关信息 Why does substring slicing with index out of range work?