如果其中一个项目也是列表,如何从单个列表创建多个行

时间:2014-10-31 07:19:29

标签: python list append

将其视为在数据库表中创建行。 我有项目清单。我们把它称为一排。其中一个也是列表。我需要创建包含内部列表中每个元素的多行,然后将它们添加到新的更大列表(行):

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附加到最终数组呢?我尝试用字典解决它,但输出类似。

1 个答案:

答案 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