Замена значений Python в списке - PullRequest
0 голосов
/ 14 апреля 2019

Я должен делать глупую ошибку, но я действительно не знаю, почему это работает так.Может кто-нибудь объяснить мне, пожалуйста?

placement = [0]*4
for image in placement:
    image = 1
print(placement)

вывод: [0, 0, 0, 0]

Ответы [ 2 ]

2 голосов
/ 14 апреля 2019

При итерации с for in по массиву, если изменение результирующего элемента из каждой итерации не повлияет на исходный массив. Используйте enumerate для перемещения по массиву с индексом и присвойте с индексом

for index, image in enumerate(placement):
    placement[index] = image + 1
2 голосов
/ 14 апреля 2019

Когда вы говорите:

image = 1

Вы изменяете только значение переменной с именем image;другими словами, вы привязываете имя image к новому значению.Это никак не влияет на исходный список.

Более подробно: когда вы говорите for image in placement, происходит то, что на каждой итерации for -петля имя image связывается со значением в соответствующей позиции в списке.Повторное присвоение ему только привязывает его к другому значению.

Указанный выше for -эквивалент эквивалентен:

  image = placement[0]
  image = 1  # does not change placement[0]
  image = placement[1]
  image = 1  # does not change placement[1]
  image = placement[2]
  image = 1  # does not change placement[2]
  image = placement[3]
  image = 1  # does not change placement[3]

Чтобы изменить элементы в списке, вы можете назначить определенный индекс:

for i in range(len(placement)):
  placement[i] = 1  # assigns into a specific position in the list, changing its contents
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...