проблема с итерацией во вложенном списке - PullRequest
0 голосов
/ 19 июня 2020

Я супер новичок в python (прошел вводный курс python 4 года go!), И я пытаюсь добавить числа от 0 до 3 в список внутри списка, поэтому:

[[0], [1], [2], [3]]

Я написал код ниже, который должен работать, но он не работает, и я не могу понять, почему:

l = 4
data = [[None]] * l
for k in range(l):
    data[k].append(k)
print(data)

, который производит это в оболочке (don ' Не волнуйтесь об элементе None там, я знаю, как от них избавиться):

[[None, 0, 1, 2, 3], [None, 0, 1, 2, 3], [None, 0, 1, 2, 3], [None, 0, 1, 2, 3]]

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

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Ваш список data состоит из четырех ссылок на один и тот же внутренний список, который инициализирован как [None]. Когда вы добавляете этот внутренний список в свой l oop, затрагиваются все четыре ссылки на него.

Если вы создадите новый список для каждого элемента, у вас не будет этой проблемы:

l = 4
data = []
for k in range(l):
    data.append([k])
print(data)

В приведенном выше коде выражение [k] создает новый список, содержащий только значение int k.

Еще проще:

l = 4
data = [[k] for k in range(l)]
print(data)
0 голосов
/ 19 июня 2020
l = 4
data = []
for k in range(l):
    data.append([k])
print(data)

None также останется в списке. Вы не снимаете его. Кроме того, он создает ссылку на тот же список. поэтому добавление к нему приведет к изменению всех внутренних списков.

Вместо добавления к внутреннему списку вы можете добавить список к списку только с одним элементом в нем.


Или вы можете использовать понимание списка:

print([[k] for k in range(4)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...