Python:在单线对循环中打破for循环&单线与blockcod的性能比较

2024-09-27 20:19:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,我想知道我是否可以把它转换成单行循环?在

for a,b in myList :
     sth = calcSth(a, b)
     if sth > 60 :
           return True

return False

另一个问题是:单线换环路和分组码对环路的性能有什么区别吗?在


Tags: 代码infalsetrueforreturnif性能
3条回答

您可以用这个oneliner替换整个循环(当在一行上使用if时,这真的是一个oneliner吗?)公司名称:

if any(calcSth(a,b)>60 for a,b in myList): return True

一旦any与条件匹配,any将立即停止测试。在

另外,根据上一次编辑,如果您计划在循环之后返回False,如果没有匹配项,则可以用以下方式替换整个例程:

^{pr2}$

编辑:关于性能,我做了一个快速的测试,正如预测的那样,any构造使用我提供的输入数据大约快了20%(最后有35个条目和匹配的条件,有点“最坏情况”)。如果匹配条件在列表的开头,则两个结构之间的差异非常小。在

严格地说,我不相信有一行代码与您发布的代码等价。正如Jean-Francois所回答的那样,您可以用一条线替换循环块,但不能使用return。在

可能是这样(修改了):

from itertools import starmap

list(filter(lambda x: x > 60, starmap(calcSth, myList))) != [] 

或者,如果你不想评估完整的列表

^{pr2}$

最后一个值将在第一个大于60的值之后停止。在

相关问题 更多 >

    热门问题