2024-09-27 20:19:18 发布
网友
我有下面的代码,我想知道我是否可以把它转换成单行循环?在
for a,b in myList : sth = calcSth(a, b) if sth > 60 : return True return False
另一个问题是:单线换环路和分组码对环路的性能有什么区别吗?在
您可以用这个oneliner替换整个循环(当在一行上使用if时,这真的是一个oneliner吗?)公司名称:
if
if any(calcSth(a,b)>60 for a,b in myList): return True
一旦any与条件匹配,any将立即停止测试。在
any
另外,根据上一次编辑,如果您计划在循环之后返回False,如果没有匹配项,则可以用以下方式替换整个例程:
False
编辑:关于性能,我做了一个快速的测试,正如预测的那样,any构造使用我提供的输入数据大约快了20%(最后有35个条目和匹配的条件,有点“最坏情况”)。如果匹配条件在列表的开头,则两个结构之间的差异非常小。在
严格地说,我不相信有一行代码与您发布的代码等价。正如Jean-Francois所回答的那样,您可以用一条线替换循环块,但不能使用return。在
return
可能是这样(修改了):
from itertools import starmap list(filter(lambda x: x > 60, starmap(calcSth, myList))) != []
或者,如果你不想评估完整的列表
最后一个值将在第一个大于60的值之后停止。在
您可以用这个oneliner替换整个循环(当在一行上使用
if
时,这真的是一个oneliner吗?)公司名称:一旦
any
与条件匹配,any
将立即停止测试。在另外,根据上一次编辑,如果您计划在循环之后返回
^{pr2}$False
,如果没有匹配项,则可以用以下方式替换整个例程:编辑:关于性能,我做了一个快速的测试,正如预测的那样,
any
构造使用我提供的输入数据大约快了20%(最后有35个条目和匹配的条件,有点“最坏情况”)。如果匹配条件在列表的开头,则两个结构之间的差异非常小。在严格地说,我不相信有一行代码与您发布的代码等价。正如Jean-Francois所回答的那样,您可以用一条线替换循环块,但不能使用
return
。在可能是这样(修改了):
或者,如果你不想评估完整的列表
^{pr2}$最后一个值将在第一个大于60的值之后停止。在
相关问题 更多 >
编程相关推荐