2015-09-29 2 views
1

Я просто заметил поведение в python, которого я не понимаю.
Представьте себе следующий код:Назначение кортежа двум полям массива

myArray = [0] * 10 
myTuple = (1,1) 

Теперь я хочу, чтобы назначить два значения в моем кортеже два поля в моем массиве. Поскольку Python позволяет изменять Muliple значения я сразу попытался

myArray[2:3] = myTuple 

Что ожидать туАггау является

[0,0,1,1,0,0,0,0,0,0] 

Но то, что я на самом деле получаю

[0,0,1,1,0,0,0,0,0,0,0] 

Кто может объяснить это поведение меня?

+4

что вы имеете в виду, вероятно: 'myArray [2: 4] = myTuple'. –

+0

Проверьте также [http://stackoverflow.com/questions/509211/explain-pythons-slice-notation](http://stackoverflow.com/q/509211/2314737) – user2314737

+0

Не совсем ясно, удивительно ли, что : 1. назначение среза может изменить длину списка; или: 2. '[2: 3]' разрезает только один элемент. Однако оба они уже объяснены в другом месте. – jonrsharpe

ответ

5

Вопрос заключается в том, что длина среза [2:3] равна 1, элемент с индексом 2 (нарезка в Python исключительно индекса stop, так что элемент с индексом 3 не включен). И вы пытаетесь вставить 2 элементов в ней, следовательно, она вставляет второй элемент после индекса 2, увеличивая размер массива на 1. Вам нужно сделать -

myArray[2:4] = myTuple 

Demo -

>>> myArray = [0] * 10 
>>> myTuple = (1,1) 
>>> myArray[2:3] = myTuple 
>>> len(myArray) 
11 
>>> myArray = [0] * 10 
>>> myTuple = (1,1) 
>>> myArray[2:4] = myTuple 
>>> len(myArray) 
10 
+0

О да ... конечно .... Иногда вы просто не можете видеть ошибки в собственном коде .. Спасибо – 0xAffe

2

myArray[2:3] - это фактически список, содержащий один элемент (который является третьим элементом в списке).

Вы просто вставляете туда 2 элемента, и это увеличивает размер списка. Вы, вероятно, захотите сделать:

myArray[2:4] = myTuple