【问题标题】:Unable to create a required list of a given size [duplicate]无法创建给定大小的必需列表[重复]
【发布时间】:2020-05-31 05:48:09
【问题描述】:
a=[[None]*3]
a=a*3
k=0
for i in range(3):
    for j in range(3):
        a[i][j]=k
        print(a)
        k=k+1
print(a)

我希望输出为 [[0,1,2],[3,4,5],[6,7,8]]。我得到了什么 是 [[6,7,8],[6,7,8],[6,7,8]]

【问题讨论】:

  • 这个a=[[None]*3] 为您提供了对同一列表的三个引用。当您更改一个时,您将全部更改。
  • @MarkMeyer 我认为问题出在a=a*3[None]*3 部分应该没问题。
  • 是的@glitch,你是对的。基本上它克隆了三个变量引用。如果你想到一个指针,它指向 a 的相同引用。
  • 对@gilch。我的错。

标签: python python-3.x list nonetype


【解决方案1】:

错误是影响每个列表元素的变量的引用更改。 采用以下方法。

n,m = 3, 3
a = [[0] * m for i in range(n)]
k=0
for i in range(3):
    for j in range(3):
        a[i][j]=k
        k=k+1
print(a)

【讨论】:

    【解决方案2】:

    您需要从a 复制每个列表,因为当使用多个列表时,它会创建引用同一列表的每个列表的副本,因此您将获得 3 个相同的列表,其中只有最后一个迭代值。

    a=[[],[],[]]
    a=[a[:], a[:], a[:]]
    k=0
    for i in range(3):
        for j in range(3):
            a[i][j]=k
            k+=1
    print(a)
    

    输出

    [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2021-12-27
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多