在 Python 中使用冒号分割列表时,使用大于列表长度的停止大小是否可以接受?
Is it acceptable to use a stop size larger than length of list when using colon to slice list in Python?
我想使用 my_list[:3]
找到列表中的前 3 个元素,但我不能保证列表的长度至少为 3。
我只能找到给定列表和小停止的例子。所以,我想知道 my_list[:3]
是否可以接受而不检查列表的长度。
谢谢!
我自己试过,效果不错。不过我想看看doc有没有说明。
无论列表的长度如何,这都很好。
这是您尝试拨打的电话的行为:
a = [1,2,3,4]
b = [1,2]
a[:3]
>>>[1,2,3]
b[:3]
>>>[1,2]
基本上它会完全按照您的意愿运行。
鉴于:
>>> 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]
大部分时间 -- 它按预期工作。如果要使用步骤进行分配,则元素需要存在。
我想使用 my_list[:3]
找到列表中的前 3 个元素,但我不能保证列表的长度至少为 3。
我只能找到给定列表和小停止的例子。所以,我想知道 my_list[:3]
是否可以接受而不检查列表的长度。
谢谢!
我自己试过,效果不错。不过我想看看doc有没有说明。
无论列表的长度如何,这都很好。
这是您尝试拨打的电话的行为:
a = [1,2,3,4]
b = [1,2]
a[:3]
>>>[1,2,3]
b[:3]
>>>[1,2]
基本上它会完全按照您的意愿运行。
鉴于:
>>> 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]
大部分时间 -- 它按预期工作。如果要使用步骤进行分配,则元素需要存在。