當前位置: 首頁>>編程語言>>正文


Python二維數組的初始化

這裏說的數組其實是python中的list, 因為它可以按索引(下標)取元素值,所以相當於是一個arraylist。

我們知道,一位數組的簡單初始化如下:

arr = [0] * 10  # 即[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

這樣可以得到一個長度為10的數組。

那麽二維情況下,能不能這麽做呢?

比如 arr2D = [[0] * 10 ] * 4 能按預期得到一個正常的10×4二維數組嗎?

答案是否定的。這樣做的確非常簡潔,但卻是有問題的,原因說明如下:

由於[0]*10是一個數組對象, [[0]*10]*4相當於把對象的引用複製了4次,也就是說修改10×4數組的任何一個元素,其他引用位置的元素也會被改變!

例如下麵的例子,這個結果顯然不是我們想要的。

>> a = [[0]*10]* 4
>> print a
[ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
>> a[0][0] = 12345
>> print a
[ [12345, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [12345, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [12345, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  [12345, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

事實上,在python中,要初始化二位數組,一種比較簡潔的正確方法是:


arr2D = [[ 0 for col in range(10) ] for row in range(4) ]

之前在實現某ML算法,存語料中的多個樣本時踩了這個坑,所以記錄下來加深下印象。

如果需要更高維度的數組,這種初始化方法就比較繞了,可以考慮將多維的元素表示成一個結構體,然後來個一維的數組就可以了。

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/790.html,未經允許,請勿轉載。