【问题标题】:Initialize an nested list with values (e.g., 0's) [duplicate]用值初始化嵌套列表(例如,0)[重复]
【发布时间】:2017-04-28 15:39:36
【问题描述】:
array1 = [[0]*4]*4

array2 = [[0,0,0,0]]*4

array3 = [[0,0,0,0],
          [0,0,0,0],
          [0,0,0,0],
          [0,0,0,0]]

array1[0][0] = 9000
array2[0][0] = 9000
array3[0][0] = 9000

In [77]: array1
Out[77]: [[9000, 0, 0, 0], 
          [9000, 0, 0, 0], 
          [9000, 0, 0, 0],
          [9000, 0, 0, 0]]

In [78]: array2
Out[78]: [[9000, 0, 0, 0],
          [9000, 0, 0, 0],
          [9000, 0, 0, 0],
          [9000, 0, 0, 0]]

In [79]: array3
Out[79]: [[9000, 0, 0, 0],
          [0, 0, 0, 0],
          [0, 0, 0, 0], 
          [0, 0, 0, 0]]

改变任何行值会改变初始化快捷方法的所有行值。
我可以获得非变异行为的唯一方法是写出整个列表。
一定有更好的方法(?),想想你想根据不同列表的长度来初始化列表的情况。

【问题讨论】:

标签: python list


【解决方案1】:

使用列表推导。

my_list = [ [0]*4 for _ in range(4)]

请注意,列表是可变的,但整数不是。因此 [0]*4 的行为与您预期的一样,但 [[0]*4]*4 '泄漏'会发生变化。

使用列表推导式每次都会创建一个新的外部列表,从而避免示例的问题行为。

【讨论】:

  • 可能想解释一下你的答案以及它为什么起作用
猜你喜欢
  • 2018-11-06
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多