【问题标题】:Appending a list into a list of lists in python changes all sublists [duplicate]将列表附加到python中的列表列表中会更改所有子列表[重复]
【发布时间】:2016-09-15 14:08:09
【问题描述】:

我正在尝试在列表中创建和附加列表和索引。附加任何列表元素会自动附加到此列表中的所有可用列表 首先我有一个列表如下

sygma_list [[]] * 3

我还有另一个列表的形式

mts_columns1 = [[1,2,3], [4,5,6], [6,7,8]]
mts_columns2 = [[1,2,3], [4,5,6], [6,7,8]]

当遍历 sygma_list 时,我是这样的:

 for i in range(0, 3):
       sygma_list[i].append(mts_column[i])

sygma_list 的结果非常令人震惊,因为 append() 对列表的每个元素都起作用,而不是获得最终结果

sygma_list = [[[1,2,3], [1,2,3]],
              [[4,5,6],[4,5,6]],
              [[6,7,8],[6,7,8]]]

【问题讨论】:

    标签: python list append


    【解决方案1】:

    您的代码中最大的问题是:当您这样做时:

    sygma_list = [[]] * 3
    

    您在同一个列表中创建了一个大小为 3 的引用数组:这不是您通常想要的,当然也不是这里

    改为这样做:

    sygma_list = [list() for x in range(3)]
    

    这将创建 3 个不同的列表。

    (这个结构适用于像 [0]*3 或 ["foo"]*4 这样的不可变对象)

    让我们考虑这个固定的代码:

    sygma_list = [list() for _ in range(3)]
    
    mts_column = [[1,2,3], [4,5,6], [6,7,8]]
    
    for i in range(0, 3):
        sygma_list[i].append(mts_column[i])
    
    print(sygma_list)
    

    产量:

    [[[1, 2, 3]], [[4, 5, 6]], [[6, 7, 8]]]
    

    顺便说一句:不确定是否要附加或扩展列表(是否将其展平)

    sygma_list[i].extend(mts_column[i])
    

    将制作列表列表而不是列表列表列表

    【讨论】:

    • 我想这是因为问题不清楚“令人惊讶”的结果是什么,并增加了混乱。我得到了不同的预期结果。我已经编辑了我的帖子。内部列表数组的重复是重点。
    • 它仍然被否决(+3/-1),但后来得到了 3 个赞成票,所以有些人做出了给出根本原因的答案。感谢那。也许整个事情(问题+答案)都不清楚,仅此而已。我特别喜欢这个问题,因为我自己在做错事时遇到了这个问题:[MyObject()] * 10 前段时间。
    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2015-08-05
    • 2013-03-08
    • 2019-03-29
    • 1970-01-01
    • 2017-12-18
    • 2021-11-13
    相关资源
    最近更新 更多