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

-2 投票
1 回答
3321 浏览
提问于 2025-04-30 20:01

可以把这看作是在数据库表中创建行。

我有一个物品列表。我们把它叫做一行。其中一个物品也是一个列表。我需要创建多行,每一行包含内部列表中的每个元素,然后把这些行添加到一个新的更大的列表中(行):

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

撰写回答