2024-04-24 08:59:05 发布
网友
诀窍是:
IPython prompt: In [1]: A = [ [] ] * 2 In [2]: A Out[2]: [[], []] In [3]: A[0].append(1) In [4]: A Out[4]: [[1], [1]]
显然,这不是我期望的结果,我想要的是[[1], []]。那为什么呢?我在关于python乘法序列的文档中没有找到ref。在
[[1], []]
有没有什么优雅的(不使用任何显式循环)方法来做到这一点?在
A = [ [] ] * 2创建一个列表,其中包含对同一列表的两个引用:
A = [ [] ] * 2
>>> A = [ [] ] * 2 >>> id(A[0]) 24956880 >>> id(A[1]) 24956880 >>> id(A[0]) == id(A[1]) True >>>
相反,您需要使用list comprehension:
注意,如果您使用的是python3.x,则需要将xrange替换为range。在
xrange
range
[ [] ]是一个包含(对)列表的引用的数组。当您将其乘以2时,您将得到一个列表,其中包含对同一列表的两个引用。试试这个:
[ [] ]
A = [[] for i in range(5)]
它将为range的每一个记号生成一个新的空列表。在
不可能真的没有循环版本,因为您确实需要构造多个列表;不可能有快捷方式。在
A = [ [] ] * 2
创建一个列表,其中包含对同一列表的两个引用:相反,您需要使用list comprehension:
^{pr2}$注意,如果您使用的是python3.x,则需要将
xrange
替换为range
。在[ [] ]
是一个包含(对)列表的引用的数组。当您将其乘以2时,您将得到一个列表,其中包含对同一列表的两个引用。试试这个:它将为
range
的每一个记号生成一个新的空列表。在不可能真的没有循环版本,因为您确实需要构造多个列表;不可能有快捷方式。在
相关问题 更多 >
编程相关推荐