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

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

Сообщение Anonymous »

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

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

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

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

l = [1, 2, 3]
for num in l:
num += 1
а это не так, потому что в цикле foreach на каждой итерации 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
не работает.
Итак, теперь я действительно запутался: если цикл foreach создает копии элементов в l, то второй цикл не должен один не работает, потому что sublist является копией списка в l, тогда следующий цикл for изменяет элементы в sublist вместо списков в l, поэтому l не должен меняться. Но это так, может кто-нибудь объяснить мне это, заранее спасибо.


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

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

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

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

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

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

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