Python中生成列表的两种方法的区别是什么?

2024-04-18 21:26:20 发布

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

当我做一个练习时,我想生成一个m*n列表,所有的元素都是0。 我发现一个有趣的问题:

# first way
a = [[0]*n]*m
a[0][0]=1
# then I find a[1][0]=1,a[2][0]=1....

# second way
b = [[0 for _ in range(n)] for _ in range(m)]
b[0][0]=1
# in this way, I get the normal effect

我对第一种方法感到困惑,list的*是什么意思


Tags: thein元素列表forgetrangefind
1条回答
网友
1楼 · 发布于 2024-04-18 21:26:20

*操作符实质上获取旧列表,并将其重新创建n次。新项与旧项相同(引用相同),但列表的长度是旧项的n

原始列表是而不是修改的,只要在末尾添加新的副本就可以修改它

例如:

[1,2,3] * 3 = [1,2,3,1,2,3,1,2,3]

[[1],[2]] * 3 = [[1],[2],[1],[2],[1],[2]]

>>> myfunc = lambda: None
>>> a = [myfunc]
>>> a
[<function <lambda> at 0x03193468>]
>>> b = a * 2
>>> b
[<function <lambda> at 0x03193468>, <function <lambda> at 0x03193468>]
>>> a
[<function <lambda> at 0x03193468>]
>>> b is a
False
>>> a is b
False

append实现“相同”的目标:

>>> X = [1,2]
>>> a = X.copy()
>>> n = 2
>>> b = a
>>> for i in range(n-1):
        for j in X:
            b.append(j)

>>> b
[1,2,1,2]
>>> a
[1,2,1,2]
>>> X
[1,2]
>>> a is b
True
>>> b is a
True

相关问题 更多 >