在Python中使用冒号到切片列表时,使用大于列表长度的停止大小是否可以接受?

时间:2016-11-14 02:24:00

标签: python list slice colon

我希望使用my_list[:3]找到列表中的前3个元素,但我不能保证列表的长度至少为3。

我只能找到给定列表和小停止的示例。所以,我想知道my_list[:3]是否可以接受而不检查列表的长度。

谢谢!

我自己尝试过,效果很好。但我想知道是否有任何doc的描述。

2 个答案:

答案 0 :(得分:1)

无论列表的长度如何,都可以。

这是您尝试拨打电话的行为:

a = [1,2,3,4]
b = [1,2]
a[:3]
>>>[1,2,3]
b[:3]
>>>[1,2]

基本上它会完全按照你的意愿行事。

答案 1 :(得分:1)

假设:

>>> li=[1,2,3]

实际上只有两种情况需要考虑。

1)如果切片超出了列表的末尾,它将传递已定义元素和空列表的重叠,而不会出现错误:

>>> li[2:]
[3]
>>> li[3:]
[]
>>> li[5555:]
[]
>>> li[1:55555]
[2, 3]
>>> li[555:55555]
[]

2)给定切片分配,替换重叠元素并附加其余元素而不会出错:

>>> li[1:5]=[12,13,14,15,16]
>>> li
[1, 12, 13, 14, 15, 16, 15]
>>> li[555:556]=[555,556]
>>> li
[1, 12, 13, 14, 15, 16, 15, 555, 556]

最后一种情况是,切片分配给非现有元素因此只是附加到现有元素。

但是,如果右侧切片与左侧的现有元素不匹配,则对于具有扩展切片的非现有元素,可以有ValueError(即,如果您有list_object[start:stop:step]):

>>> li
[1, 2, 3]
>>> li[1:7:2]=range(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 4 to extended slice of size 1

但如果它们存在,您可以执行扩展切片分配:

>>> li=['X']*10
>>> li
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']
>>> li[1:10:2]=range(5)
>>> li
['X', 0, 'X', 1, 'X', 2, 'X', 3, 'X', 4]

大部分时间 - 它按预期工作。如果要使用步骤进行分配,则需要存在元素。