【问题标题】:What is the difference between these two array declarations in Python?Python中这两个数组声明有什么区别?
【发布时间】:2011-12-10 04:01:50
【问题描述】:

这两个数组声明在Python中有什么区别?

table = [[0]*100]*100
table = numpy.zeros([100,100], int)

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    事实上,他们没有任何共同之处。第二个是一个 numpy 二维数组。第一个没有任何用处 - 它是一个包含 100 个项目的数组,每个项目都是对 100 个零的 SINGLE 数组的引用:

    table = [[0]*100]*100
    table[1][0]=222
    print table[0][0]
    

    这会打印“222”!

    table = numpy.zeros([100,100], int)
    table[1][0]=222
    print table[0][0]
    

    这会打印“0”!

    【讨论】:

      【解决方案2】:

      好吧,第一次,第一个是危险的错误的。看到这个:

      In [8]: table = [[0]*2]*10
      
      In [9]: table
      Out[9]: 
      [[0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0]]
      
      In [10]: table[0][1] = 5
      
      In [11]: table
      Out[11]: 
      [[0, 5],
       [0, 5],
       [0, 5],
       [0, 5],
       [0, 5],
       [0, 5],
       [0, 5],
       [0, 5],
       [0, 5],
       [0, 5]]
      

      这是因为您声明table 的方式,子列表再次重复。有关正确执行此操作的信息,请参阅 this FAQ

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-07
        • 2012-04-01
        • 2017-08-13
        • 2016-05-08
        • 2016-08-01
        相关资源
        最近更新 更多