2011-03-18 51 views
8

我是Python的初學者,這是我的第一篇文章,所以不要太苛刻:)。我一直在使用Python玩弄最近,想知道是否像Python中的列表推導是否以內存有效的方式減少?

max([x for x in range(25)]) 

會導致Python中首先創建的所有元素的列表,然後找到最大,導致O(2N)時,或將跟蹤最大值,因爲它正在迭代Θ(n)。另外,由於Python3中的範圍不同(可迭代),它會不同於Python2嗎?

回答

14

您的示例將導致Python首先構建整個列表。如果你想避免這種情況,你可以使用一個生成器表達式來代替:

max((x for x in range(25))) 

或者乾脆:

max(x for x in range(25)) 

當然,(在Python 2),range本身建立的完整列表,所以你真想在這種情況下是:

max(x for x in xrange(25)) 

然而,對於採取所有這些詞彙具有相同的複雜的時間。最重要的區別是最後一個需要O(1)空間,而其他需要O(n)空間。

2

列表解析總是生成一個列表(除非拋出異常)。大多數情況下建議使用genex。

max(x for x in xrange(25))