2016-06-10 77 views
0

昨天我遇到了一個列表理解,並且看到了sum(x[y])並且嘗試了但是無法理解到底發生了什麼。無法準確理解函數在這裏做什麼

創建Lo Shu magic square,我看到sum(x[y]),其中x是一個嵌套列表,y是在範圍內。我只知道基本保額功能過程中,如果任何人解釋上述概念和SUM函數

>>> values = [list(range(1, 4)), list(range(4, 7))] 

>>> values 
[[1, 2, 3], [4, 5, 6]] 

>>> sum(x[y] for x in values for y in range(2)) 
12 
>>> sum(x[y] for x in values for y in range(3)) 
21 
+4

這些實際上是生成器表達式。一個小但微妙的差異。 –

+1

嘗試重新編寫沒有生成器表達式的語句,並且您可能會理解它 –

回答

2

sum功能增加了提交給它的所有值的其他應用程序我將不勝感激。

(x[y] for x in values for y in range(2))產生的值1, 2, 4, 5
(x[y] for x in values for y in range(3))產生的值1, 2, 3, 4, 5, 6

因此,你得到sum([1,2,4,5])=12sum([1, 2, 3, 4, 5, 6])=21

閱讀the docs瞭解發電機是如何工作的。

+1

生成器表達式是可迭代的並生成值。它不會生成一個列表。 –

+0

有什麼區別?他們不以同樣的方式工作嗎?這與性能有關嗎? – SvbZ3r0

+1

是的,它與性能相關。如果你不需要所有的值,它們只在需要時才被創建。 –