недоразумение о списках и множественных итерациях - PullRequest
1 голос
/ 09 ноября 2019

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

L = []
x = []
for i in range(4):  
    x.append(0)
    L.append(x)
print (L)

Вывод показывает это:

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

вместо этого:

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

Мне стало любопытно после поиска способов создания сетокМой проект - грубая игра на линкоре, которую я должен сделать с сеткой

Я думаю, было бы логично, чтобы в первом добавленном списке был только один объект, поскольку он итерировал в первый раз, поэтому длина«х» будет равно 1, а не 4.

1 Ответ

0 голосов
/ 09 ноября 2019

Я думаю, было бы логично, чтобы в первом добавленном списке содержался только один объект, поскольку он выполнялся в первый раз, поэтому длина "x" была бы равна 1, а не 4.

В первом добавленном списке есть только один 0. Но это тот же список, который вы вызываете .append(0) в следующей итерации цикла.

Что делает ваш код в данный момент?

  • Вы создаете два списка, xи y.
  • Затем вы повторяете цикл 4 раза и
    • добавляете ноль к списку в x
    • , добавляете список x к списку L

В результате вы получите тот же список x с четырьмя нулями четыре раза в списке L

Что вы действительно хотите, чтобы ваш кодЧтобы сделать

  • Вы создаете два списка, x и y.
  • Затем вы повторяете цикл 4 раза и
    • добавляете ноль к списку в x
    • добавить копию списка x к списку L

Как должен выглядеть ваш код

Существует несколько способов скопировать список в Python:

Ваш код может выглядеть следующим образом:

x = []
L = []

for _ in range(4):
    x.append(0)
    L.append(x[:])

print(L)

Вывод:

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

...