【问题标题】:Python: The confusion of value assignment in 2-dimension list [duplicate]Python:二维列表中赋值的混淆[重复]
【发布时间】:2017-10-28 03:30:43
【问题描述】:

我在python中这样定义一个二维数组:

a = [[1]*3]*3

我想将一个元素指定为 2,例如:

a[1][1] = 2

然而,a 原来是:

[[1,2,1],[1,2,1],[1,2,1]]

而不是我的想法:

[[1,1,1],[1,2,1],[1,1,1]]

有人知道吗?

The ScreenShot of the code

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您可以使用列表推导来做到这一点:

    a=[[1 for _ in range(3)] for _ in range(3)]
    
    a
    Out[32]: [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
    
    a[1][1]=2
    
    a
    Out[34]: [[1, 1, 1], [1, 2, 1], [1, 1, 1]]
    

    【讨论】:

    • 是的,我发现这个方法有效,非常感谢!我在另一个问题中找到了真正的原因。
    【解决方案2】:

    我认为括号内有括号会使 None 值项为 0 并且它首先乘/解包内部乘法,因此您的参考 a[1][1] 指的是元列表 [[1 ,1 1]*3] 并在第二次乘法发生之前将第二个元素的第二个元素转换为 2,因为操作顺序。

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 2016-03-05
      • 2013-09-11
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多