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 ,因此不会导致这种行为。
解决方案
这不是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]]]
推荐阅读
- python - 读取 CSV 文件的每一列作为字典的键
- haskell - 制作 Monoid 的自定义列表 ADT 实例
- ios - All my objects are white when I build for IOS
- r - 有没有一种有效的方法可以使用 ggplot2 在堆积条形图中的不同元素之间绘制线条?
- c - Logical operators' precedence in C
- php - PHPMailer semi issue
- sql - 如何通过连接 2 个临时表创建永久表
- algorithm - 寻路任务 - 如何在从 A 到 B 的最短路径上比 O ( n ) 更快地找到下一个顶点?
- objective-c - Objective C adding methods to classes argument mismatch
- ajax - 从视图到控制器的 IEnumerable 模型为 NULL