我想通过使用my_list[:3]
找到列表中的前3个元素,但我不能保证列表将至少为长度3.在Python中使用冒号切片列表时,使用大于列表长度的停止大小是否可以接受?
我只能找到给定列表和小停止的示例。所以,我想知道my_list[:3]
是否可以不检查列表的长度。
谢谢!
我已经尝试了自己,它运作良好。但是我想看看是否有任何doc的描述。
我想通过使用my_list[:3]
找到列表中的前3个元素,但我不能保证列表将至少为长度3.在Python中使用冒号切片列表时,使用大于列表长度的停止大小是否可以接受?
我只能找到给定列表和小停止的示例。所以,我想知道my_list[:3]
是否可以不检查列表的长度。
谢谢!
我已经尝试了自己,它运作良好。但是我想看看是否有任何doc的描述。
考虑:
>>> 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]
最后一种情况存在,切片任务是因此被刚刚附加到现有的元件不存在的元素。
然而,如果右手片无法在左手匹配现有的元素,可以有与扩展切片不存在的元素(即,如果您有list_object[start:stop:step]
)一ValueError
:
>>> 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]
大部分时间 - 它按预期工作。如果您想使用步骤进行分配,则元素需要存在。
无论列表的长度如何,这都很好。
这是你想拨打电话的行为:
a = [1,2,3,4]
b = [1,2]
a[:3]
>>>[1,2,3]
b[:3]
>>>[1,2]
本质上,它的行为完全为你想。
是的,这工作正常。 –
在shell中测试它比在Stack Overflow上编写问题花费的时间要少得多。 Python是交互式的 - 所以与它交互。 –
如果list比3个元素短,那么'[:3]'给出更少的元素而没有错误 - 所以如果你需要'my_list [:3]'中的第3个元素,你将不得不检查长度。 – furas