将其视为在数据库表中创建行。 我有项目清单。我们把它称为一排。其中一个也是列表。我需要创建包含内部列表中每个元素的多行,然后将它们添加到新的更大列表(行):
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看起来是正确的。那么为什么temp_rows附加到最终数组呢?我尝试用字典解决它,但输出类似。
答案 0 :(得分:0)
错误在行
temp_row = row
您将temp_row的引用设置为行的引用。这意味着他们指向完全相同的列表。如果你改变temp_row,你将改变行。因此,插入具有完全相同引用的三个temp_rows将为您提供输出。要更改它,请在行后粘贴[:]。像这样:
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