Python乘法序列

2024-04-24 08:59:05 发布

您现在位置:Python中文网/ 问答频道 /正文

诀窍是:

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。在

有没有什么优雅的(不使用任何显式循环)方法来做到这一点?在


Tags: 方法in文档refipython序列outprompt
2条回答

A = [ [] ] * 2创建一个列表,其中包含对同一列表的两个引用:

>>> A = [ [] ] * 2
>>> id(A[0])
24956880
>>> id(A[1])
24956880
>>> id(A[0]) == id(A[1])
True
>>>

相反,您需要使用list comprehension

^{pr2}$

注意,如果您使用的是python3.x,则需要将xrange替换为range。在

[ [] ]是一个包含(对)列表的引用的数组。当您将其乘以2时,您将得到一个列表,其中包含对同一列表的两个引用。试试这个:

A = [[] for i in range(5)]

它将为range的每一个记号生成一个新的空列表。在

不可能真的没有循环版本,因为您确实需要构造多个列表;不可能有快捷方式。在

相关问题 更多 >