我想了解切片。这个切片是如何工作的?
>>> a=['c','b']
>>> a
['c', 'b']
>>> a[-3:-1:3]
['c']
我已经阅读了所有帖子,但找不到答案。据我所知,切片应该是[start:stop:step]
。但是如果我在一步之后从-3开始,我就是0。
这究竟是如何工作的?打印哪些索引?范围内的那些?
答案 0 :(得分:1)
首先请注意a[-3:-1]
是['c']
。
a[-3:-1]
是一个包含[a[-3], a[-2]]
中所有元素的切片(如果存在的话)。
>>> a=['c','b']
>>> a[-3:-1]
['c']
a[-3]
不存在(它会引发IndexError),但a[-2]
为'c'
:
>>> a[-2]
'c'
这是有道理的,因为a[-1]
是最后一个元素'b'
。 a[-2]
因此是倒数第二个元素。
最后,
>>> a[-3:-1:3]
['c']
因为这是a[-3:-1]
中的每三个元素。由于a[-3:-1]
中只有一个元素,因此每个第三个元素与第一个元素相同。
切片的确切规则由Notes 3 and 5 of the docs section entitled "Common Sequence Operations"给出。
答案 1 :(得分:1)
将索引视为元素之后的分隔符。 e.g。
给出列表['a', 'b', 'c']
正数索引(| n |中的索引):['a'|0| 'b'|1| 'c'|2|]
负索引(| n |中的索引),我将反向显示列表,因此它更清晰:['c'|-1| 'b'|-2| 'a'|-3|]
或原始方向(但从最后开始考虑它){ {1}}
所以在你的例子中:[|-3|'a' |-2|'b' |-1|'c']
你的负面索引是a=['c','b']
但是当你做一个范围时,当你传递超出范围的起始索引{{1}时,Python不会抱怨}。实际上,当你执行一个范围时你可以传入任意索引,Python也不会抱怨。试着举例[|-2|'c' |-1|'b']
,但因为在你的情况下你的范围确实包含-3
,所以你得到的就是。