Дано:
>>> 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]
Большой частью времени - это работает, как ожидалось. Если вы хотите использовать шаг для назначений, элементы должны быть существующими.
Да, это прекрасно работает. –
Требуется гораздо меньше времени, чтобы проверить его в оболочке, чем на вопрос о переполнении стека. Python является интерактивным, поэтому взаимодействуйте с ним. –
, если список короче, чем 3 элемента, тогда '[: 3]' дает меньше элементов без ошибок, поэтому вам нужно будет проверить длину, если вам нужен третий элемент из 'my_list [: 3]'. – furas