dav*_*loo 8 python reduce list
我是Python的初学者,这是我的第一篇文章,所以不要太苛刻:).我最近一直在玩Python,并且想知道是否有类似的东西
max([x for x in range(25)])
Run Code Online (Sandbox Code Playgroud)
会导致Python首先创建所有元素的列表,然后找到最大值,产生O(2n)时间,或者它会跟踪Θ(n)迭代时的最大值.另外,由于Python3中的范围不同(是可迭代的),是否会使它与Python2中的不同?
jch*_*chl 14
您的示例将导致Python首先构建整个列表.如果要避免这种情况,可以使用生成器表达式:
max((x for x in range(25)))
Run Code Online (Sandbox Code Playgroud)
或者干脆:
max(x for x in range(25))
Run Code Online (Sandbox Code Playgroud)
当然(在Python 2中),range它本身构建了一个完整的列表,所以在这种情况下你真正想要的是:
max(x for x in xrange(25))
Run Code Online (Sandbox Code Playgroud)
但是,关于所花费的时间,所有这些表达具有相同的复杂性.重要的区别是最后一个需要O(1)空间,而其他需要O(n)空间.