在 Python 中,可以使用数组切片表示法来获取可迭代对象中的值的子集:
a = [0,1,2]
a[0:2]
# returns all members from the 0th to the 2nd: [0,1]
如果您尝试提取第一个值为负而第二个值为正的切片,则请求返回一个空列表:
a[-1:2]
# returns []
这对我来说是违反直觉的,因为 -1:2 定义的范围似乎是 0:2 定义的范围的超集。
我知道可以使用负索引从带有 Python 切片符号的数组末尾提取(例如:a[-1] 是 2),但在第一个切片位置和第二个中的正数应该引发错误或返回由同一切片返回的值的超集,第一个位置为 0。
我很想知道第一个位置为负值而第二个位置为正值的切片请求返回的空列表背后的动机,如果有人碰巧对这方面有洞察力...
请您参考如下方法:
负索引对于获取最后一个元素非常有用:
>>> letters = list('abcdefgh')
>>> letters[-3:]
['f', 'g', 'h']
>>> letters[-3:-1]
['f', 'g']
在这种情况下过早地引发异常将是一个巨大的错误。
您还可以混合使用负索引和正索引:
>>> letters[-5:6]
['d', 'e', 'f']
表示倒数第 5 个元素之后和第 6 个元素之前的元素。
在你的情况下:
>>> letters[-1:2]
[]
返回一个空列表,因为最后一个和第二个之间没有元素。
虽然它并不总是空的:
>>> ['a'][-1:2]
['a']
>>> ['a','b'][-1:2]
['b']
