列表矩阵 - Python

时间:2014-01-20 15:38:50

标签: python list python-2.7 python-3.x matrix

我想创建一个列表矩阵,但是当我在矩阵中创建列表时,它创建了一个链表,我不需要它。

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}]]

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

1 个答案:

答案 0 :(得分:10)

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

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

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