#python
#python
Вопрос:
Я пытаюсь создать сложный список на python с общей структурой, описанной следующим образом.
Внешний список представляет собой обычный список вида [index1, index2, index3, ...]
и каждый индекс в списке имеет следующую структуру:
[a, b, [[c, d], [e, f], [g, h], ...]
Предполагается, что значения c, d, e, f, etc
должны соответствовать значениям a and b
и должны быть уникальными для индекса, поэтому повторения не должно быть, если a and b
они не повторяются.
Код, который я должен попытаться реализовать, это:
a = []
b = []
for i in range(4):
a.append([i,i])
b.clear()
for j in range(6):
b.append([i,j])
a[i].append(b)
И результат, который я получаю при печати каждого индекса:
[0, 0, [[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5]]]
[1, 1, [[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5]]]
[2, 2, [[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5]]]
[3, 3, [[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5]]]
Как уже отмечалось, выходные данные содержат только данные из конечного индекса. Я могу сказать, что b.clear()
причиной этого является, но я думаю, что, поскольку я добавляю к a перед очисткой данных предыдущего индекса, это не вызовет такого поведения.
Комментарии:
1. Как вы можете определить,
b.clear()
почему выходные данные содержат только данные из конечного индекса?2. вам нужно создать копию списка, используя
b.copy()
while appending toa
. попробуйте сa[i].append(b.copy())
3. Создание копии сработало. Спасибо!
Ответ №1:
Проблема не clear
в том, что это обязательно вызывает проблему, а в том, что вы повторно используете массив b
, объявленный на том же уровне, a
что и . Перемещение инициализации b
в цикл (и даже сохранение clear
) дает вам поведение, которое вы ожидали.
a = []
for i in range(4):
a.append([i, i])
b = []
b.clear()
for j in range(6):
b.append([i, j])
a[i].append(b)
Вывод
[0, 0, [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5]]]
[1, 1, [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5]]]
[2, 2, [[2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5]]]
[3, 3, [[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5]]]