扩展切片在python中有3个args

时间:2013-12-27 22:16:20

标签: python list slice

我想了解切片。这个切片是如何工作的?

>>> a=['c','b']
>>> a
['c', 'b']
>>> a[-3:-1:3]
['c']

我已经阅读了所有帖子,但找不到答案。据我所知,切片应该是[start:stop:step]。但是如果我在一步之后从-3开始,我就是0。 这究竟是如何工作的?打印哪些索引?范围内的那些?

2 个答案:

答案 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,所以你得到的就是。