t = [[0] * 4] * 10000
的作品,但可能不會做你的期望。它不會創建10000個列表的列表,它將創建一個列表,其中包含10000 引用到單個列表。看看會發生什麼,當你試圖開始改變內部數組中的元素:
>>> t = [[0] * 4] * 3
>>> t
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> t[0][0] = 1
>>> t
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
相反,以下是可能是你所期待:
>>> t = [[0] * 4 for _ in xrange(3)]
>>> t
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> t[0][0] = 1
>>> t
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
的原因是,乘以一個列表只需創建一個更長的列表,其中包含多個對原始列表中元素的引用。這幾乎不是一個好主意,除非你知道該列表包含完全不可變的對象(如數字和字符串);這就是爲什麼在我的答案版本中使用[0] * 4
中的列表乘法仍然可以,儘管[[0] * 4] * 10000
中的外部列表乘法是危險的。
如果您稍後將它們放入數組中,爲什麼不直接將它們放入數組中呢? – Chris
他們最初需要先定義。 – Zizma
爲什麼他們需要先定義? – kindall