Python 是否定义了此切片行为?

Python 是否定义了此切片行为?,python,python-3.x,slice,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。在a中,第一项(开始)包括在内。第二个参数(stop)是独占的。当给出-3停止时,意味着从1转到1。由于stop是独占的,因此排除了唯一的项,结

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

在a中,第一项(开始)包括在内。第二个参数(stop)是独占的。当给出-3停止时,意味着从
1
转到
1
。由于stop是独占的,因此排除了唯一的项,结果为空。当给出-2时,它将转换为索引1。一旦给出索引0,您就已经通过了索引1,因为该步骤为负。因此,结果是空的。你会得到与-1类似的结果。但是,从末尾取-4将变为-1,因为列表中只有三项。从0到-1有一个负的步骤是可能的:索引0包括在内,索引-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]
,依此类推

你只是问第一个例子吗?@zondo:是的。其他的对我来说都很清楚,这是定义的行为。它类似于
[1,2,3][2:3]
,只是向后走,而不是向前走。谢谢,zondo。你的回答太好了!我想我搞错了什么。你能告诉我其他三个例子是如何得出结果的吗?因为如果我遵循这个规则,索引0处的元素应该包括在内,对吗?@Reyha24:很好。我想我也误解了。请参阅我编辑的答案。