是否定义了切片行为?

时间:2016-07-10 00:09:08

标签: python python-3.x slice

我正在处理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。

2 个答案:

答案 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],依此类推。