首页 > 解决方案 > 如何动态追加到列表

问题描述

我正在尝试在 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 ,因此不会导致这种行为。

标签: python

解决方案


这不是clear必然导致问题的原因,而是因为您正在重用ba. 将初始化移动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]]]

推荐阅读