使用值(例如,0)

时间:2017-04-28 15:39:36

标签: python list

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]]

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

1 个答案:

答案 0 :(得分:2)

使用列表理解。

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

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

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