a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]
多個列表有沒有一種方法,其中X,Y,Z可以初始化在一行(因爲我不想乘A,B和C每個列表初始化),作爲單獨的0列表。在上面如果x被更新,那麼y和z也會被同時更新並進行相同的更改。初始化蟒蛇
a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]
多個列表有沒有一種方法,其中X,Y,Z可以初始化在一行(因爲我不想乘A,B和C每個列表初始化),作爲單獨的0列表。在上面如果x被更新,那麼y和z也會被同時更新並進行相同的更改。初始化蟒蛇
只是用另一種理解和解壓:
x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)]
注意[0 for i in xrange(a*b*c)]
等同於簡單的[0] * a*b*c
。
看着你陳述的意圖,而不是在「一條線」的要求:
a = 2
b = 3
c = 4
x = [0 for i in xrange(a*b*c)]
y = x [:]
z = x [:]
不確定優化是足夠聰明,避免重複乘法:
x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)]
假設A,B ,c是屬性,所以閱讀它們會產生副作用。優化器如何在動態類型語言中知道這一點?
如何使用一個發電機,這樣的列表實際上並沒有建立? 'a,b,c =([x in xrange(a * b * c)] for _ in xrange(3))' – Netwave
@DanielSanchez - 我們當然可以做到這一點。然而,從它看到的任何性能好處都需要創建更多的列表,而不是將它們解壓到單個行中的多個獨立變量中。無論如何,它只需要存儲參考文件,這些文件很小。 – TigerhawkT3
請你可以進一步解釋一下,因爲我看到你正在構建一個包含另一個列表的列表,但你永遠不會使用該列表。通過使用生成器,您可以擺脫該列表。我錯了還是錯過了一些東西?謝謝!! – Netwave