我是Python的初學者,這是我的第一篇文章,所以不要太苛刻:)。我一直在使用Python玩弄最近,想知道是否像Python中的列表推導是否以內存有效的方式減少?
max([x for x in range(25)])
會導致Python中首先創建的所有元素的列表,然後找到最大,導致O(2N)時,或將跟蹤最大值,因爲它正在迭代Θ(n)。另外,由於Python3中的範圍不同(可迭代),它會不同於Python2嗎?
我是Python的初學者,這是我的第一篇文章,所以不要太苛刻:)。我一直在使用Python玩弄最近,想知道是否像Python中的列表推導是否以內存有效的方式減少?
max([x for x in range(25)])
會導致Python中首先創建的所有元素的列表,然後找到最大,導致O(2N)時,或將跟蹤最大值,因爲它正在迭代Θ(n)。另外,由於Python3中的範圍不同(可迭代),它會不同於Python2嗎?
您的示例將導致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)空間。
列表解析總是生成一個列表(除非拋出異常)。大多數情況下建議使用genex。
max(x for x in xrange(25))