我需要检查列表中的任何字符串是否与正则表达式匹配。如果有,我想继续。我过去一直这样做的方法是将列表理解与类似的东西一起使用:
r = re.compile('.*search.*')
if [line for line in output if r.match(line)]:
do_stuff()
我现在意识到这是非常低效的。如果列表中的第一项匹配,我们可以跳过所有其余的比较并继续进行。我可以通过以下方法对此进行改进:
r = re.compile('.*search.*')
for line in output:
if r.match(line):
do_stuff()
break
但是我想知道是否还有一种更Python化的方式来做到这一点。
您可以使用内置的any()
:
r = re.compile('.*search.*')
if any(r.match(line) for line in output):
do_stuff()
将懒惰的生成器传递给any()
将允许它在第一个比赛中退出,而不必检查任何进一步进入可迭代的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句