列表矩阵 – Python

参见英文答案 > List of lists changes reflected across sublists unexpectedly                                    12个
我想创建一个列表矩阵,但是当我在矩阵中创建列表时,它创建了一个链表,我不需要它.

A=[[{}]*3]*3
result: [[{}, {}, {}], [{}, {}, {}], [{}, {}, {}]]
A[0][2]['h1']=1
result: [[{'h1': 1}, {'h1': 1}, {'h1': 1}],
 [{'h1': 1}, {'h1': 1}, {'h1': 1}],
 [{'h1': 1}, {'h1': 1}, {'h1': 1}]]

谁知道如何避免这种情况?我需要在矩阵的每个字段内有一个列表.

最佳答案
您正在使用对同一列表的3个引用初始化A,并且正在使用对同一字典的3个引用初始化每个列表.相反,尝试显式调用每个子列表和字典的构造函数:

>>> A = [ [{} for _ in range(3) ] for _ in range(3) ]
>>> A[0][2]['h1']=1
>>> A
[[{}, {}, {'h1': 1}],
 [{}, {}, {}],
 [{}, {}, {}]
]

作为旁注,“linked list”通常是指同名的数据结构,而不是您对同一对象有多个引用的情况.

转载注明原文:列表矩阵 – Python - 代码日志