如何从单个列表创建多行,如果其中一个项也是列表
可以把这看作是在数据库表中创建行。
我有一个物品列表。我们把它叫做一行。其中一个物品也是一个列表。我需要创建多行,每一行包含内部列表中的每个元素,然后把这些行添加到一个新的更大的列表中(行):
rows = []
row = [1, 2, [3, 4, 5]]
temp_row = None
for i, v in enumerate(row):
if isinstance(v, list):
print i, v
for j in v:
temp_row = row
temp_row[i] = j
print temp_row
rows.append(temp_row)
print rows
但是输出看起来是这样的:
2 [3, 4, 5]
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[[1, 2, 5], [1, 2, 5], [1, 2, 5]]
你可以看到,在把temp_row添加到行之前,它打印出来是正确的。那么为什么temp_row添加到最终数组后就不对了呢?我尝试用字典来解决这个问题,但输出结果还是差不多。
1 个回答
0
这个问题出在这一行
temp_row = row
你把temp_row的引用赋值给了row的引用。这就意味着它们指向的是完全相同的列表。如果你修改了temp_row,row也会跟着改变。所以,如果你插入三个完全相同引用的temp_row,就会得到那个结果。要解决这个问题,可以在row后面加上[:]。像这样:
rows = []
row = [1, 2, [3, 4, 5]]
temp_row = None
for i, v in enumerate(row):
if isinstance(v, list):
print i, v
for j in v:
temp_row = row[:]
temp_row[i] = j
print temp_row
rows.append(temp_row)
print rows