Разница между `for item in list` и `for i in range(len(list))` при обновлении элементов во вложенном спискеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разница между `for item in list` и `for i in range(len(list))` при обновлении элементов во вложенном списке

Сообщение Anonymous »

Насколько я понимаю, если я хочу обновить элементы списка, это сработает,

Код: Выделить всё

l = [1, 2, 3]
for i in range(len(l)):
l[i] += 1
а это не так,

Код: Выделить всё

l = [1, 2, 3]
for num in l:
num += 1
потому что в цикле «для каждого» на каждой итерации num создается копия каждого элемента в l.
Но если я хочу изменить вложенный список,

Код: Выделить всё

l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i in range(len(l)):
for j in range(len(l[i])):
l[i][j] += 1
и

Код: Выделить всё

l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for sublist in l:
for i in range(len(sublist)):
sublist[i] += 1
оба работают, а этот не работает:

Код: Выделить всё

l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for sublist in l:
for num in sublist:
num += 1
Итак, теперь я действительно запутался: если цикл «для каждого» создает копии элементов в l, то второй не должен работать, потому что подсписок code> являются копиями списка в l, то следующий цикл for изменяет элементы в sublist вместо списков в l, поэтому l не должен меняться. Но это так, может кто-нибудь объяснить мне это?


Подробнее здесь: https://stackoverflow.com/questions/790 ... when-updat
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»