Python中的列表推导在内存效率上是否有优化?

8

我是Python的初学者,这是我的第一篇文章,所以请不要太苛刻 :)。最近我一直在研究Python,并想知道是否可以实现以下功能:

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

如果使用Python创建一个元素列表然后找到最大值,会导致O(2n)时间复杂度;或者在迭代时跟踪最大值,则时间复杂度为Θ(n)。此外,由于Python3中的range(是可迭代对象),与Python2中的range有所不同吗?

2个回答

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

列表推导式总是生成一个列表(除非有异常抛出)。在大多数情况下,建议使用生成器表达式。

max(x for x in xrange(25))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接