2015-10-28 6 views
6

Почему этот код не выдает ошибку при запуске интерпретатором Python.Любопытное поведение списков Python

a = ['A', 'B', 'C'] 
a[20:] = ['D', 'E'] 
print a 

Выход ['A', 'B', 'C', 'D', 'E']. Я думал, что Python даст мне ошибку во втором заявлении, так как a имеет только 3 элемента. Используется ли эта функция при естественном использовании во время кодирования?

+1

Это дает гораздо меньше смысла, чем чтение 'a [20:]'. Довольно странно, что 'assert ['D', 'E'] == a [20:]' здесь не будет – Eric

+1

Это имеет смысл с тем, как работает индексация фрагментов. Так как 'a [3:] == a [20:]', то из-за внутренней реализации на уровне C он просто добавляет элементы, если null или перезаписывает выбранный диапазон. –

+0

@ Эрик: 'a [20:]' просто вернет пустой список. – tuxtimo

ответ

4

Вот как работает python. В python для нарезки никаких проверок границ не будет. Он просто расширяет ваш список, поскольку он является изменяемым объектом.

Это также интересно, когда вы читаете из границ с нарезкой:

f = a[20:] 

f будет пустой список.

Смежные вопросы