我正在处理Python的切片,我遇到了意想不到的结果。
示例:
print([1, 2, 3][0:-4:-1])
返回[1]
print([1, 2, 3][0:-3:-1])
print([1, 2, 3][0:-2:-1])
print([1, 2, 3][0:-1:-1])
每个都返回[]
(如预期的那样)。
这是怎么发生的?
谢谢,Reyha24。
答案 0 :(得分:2)
在slice中,第一项(开始)包含在内。第二个参数(停止)是 ex clusive。当给出-3的停止时,这意味着从1
转到1
。由于停止是独占的,因此排除了唯一的项目,结果为空。当给出-2时,它转换为索引1.一旦给出索引0,就已经传递了索引1,因为该步骤是否定的。因此,结果是空的。你得到的东西与-1相似。但是,从最后得到-4变为-1,因为列表中只有三个项目。可以使用负步骤从0到-1:包含索引0,索引-1不是因为它在列表中稍后显示。
答案 1 :(得分:1)
如果您反转切片并转换为常规索引,我认为这更清楚。由于python使用半开间隔,[0:-4:-1]
会转换为[1, 2, 3][-3:1]
。在这种情况下,-3
对应于索引0
,因此这会转换为[1, 2, 3][0:1]
,这只是第一个元素。第二种情况[0:-3:-1]
转换为[-2:1]
,即[1:1]
,为空。第三种情况转换为[2:1]
,依此类推。