3 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
基本上,Python列表非常靈活,可以保存完全異構(gòu)的任意數(shù)據(jù),并且可以在攤銷(xiāo)的常量時(shí)間內(nèi)非常有效地附加。如果你需要有效地縮短和增加你的列表并且沒(méi)有麻煩,那么它們就是你要走的路。但是他們比C陣列使用更多的空間。
的array.array
類(lèi)型,在另一方面,是只在C數(shù)組的薄包裝。它只能保存同類(lèi)數(shù)據(jù),所有類(lèi)型都相同,因此它只使用sizeof(one object) * length
字節(jié)的內(nèi)存。大多數(shù)情況下,您需要在需要將C數(shù)組公開(kāi)給擴(kuò)展或系統(tǒng)調(diào)用時(shí)使用它(例如,ioctl
或fctnl
)。
array.array
也是在Python 2.x()中表示可變字符串的合理方法array('B', bytes)
。但是,Python 2.6+和3.x提供了一個(gè)可變字節(jié)字符串bytearray
。
但是,如果你想對(duì)同類(lèi)數(shù)組數(shù)據(jù)進(jìn)行數(shù)學(xué)運(yùn)算,那么你最好使用NumPy,它可以自動(dòng)對(duì)復(fù)雜多維數(shù)組上的操作進(jìn)行矢量化。
簡(jiǎn)而言之:array.array
當(dāng)你需要一個(gè)同質(zhì)的C數(shù)組時(shí),除了做數(shù)學(xué)之外的其他原因,這個(gè)數(shù)據(jù)非常有用。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果您不知道為什么要使用它,那么陣列模塊就是您可能不需要的那種東西之一(請(qǐng)注意我并不是想以一種居高臨下的方式說(shuō)出來(lái)?。?。大多數(shù)情況下,陣列模塊用于與C代碼接口。為了更直接地回答有關(guān)性能的問(wèn)題:
對(duì)于某些用途,數(shù)組比列表更有效。如果你需要分配一個(gè)你知道不會(huì)改變的數(shù)組,那么數(shù)組可以更快并且使用更少的內(nèi)存。GvR有一個(gè)優(yōu)化軼事,其中數(shù)組模塊成為贏家(長(zhǎng)讀,但值得)。
另一方面,列表占用更多內(nèi)存而不是數(shù)組的部分原因是因?yàn)閜ython將在使用所有已分配元素時(shí)分配一些額外元素。這意味著將項(xiàng)目附加到列表更快。因此,如果您計(jì)劃添加項(xiàng)目,則可以使用列表。
TL; DR我只使用一個(gè)數(shù)組,如果你有一個(gè)特殊的優(yōu)化需求,或者你需要與C代碼接口(并且不能使用pyrex)。
添加回答
舉報(bào)