2016-08-04 79 views
0
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也會被同時更新並進行相同的更改。初始化蟒蛇

回答

3

只是用另一種理解和解壓:

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

+0

如何使用一個發電機,這樣的列表實際上並沒有建立? 'a,b,c =([x in xrange(a * b * c)] for _ in xrange(3))' – Netwave

+0

@DanielSanchez - 我們當然可以做到這一點。然而,從它看到的任何性能好處都需要創建更多的列表,而不是將它們解壓到單個行中的多個獨立變量中。無論如何,它只需要存儲參考文件,這些文件很小。 – TigerhawkT3

+0

請你可以進一步解釋一下,因爲我看到你正在構建一個包含另一個列表的列表,但你永遠不會使用該列表。通過使用生成器,您可以擺脫該列表。我錯了還是錯過了一些東西?謝謝!! – Netwave

0

看着你陳述的意圖,而不是在「一條線」的要求:

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是屬性,所以閱讀它們會產生副作用。優化器如何在動態類型語言中知道這一點?