我试图定义一个函数,如果模式匹配列表中的所有字符串,则返回True。比如,matchAll(模式,列表)。
我最初的尝试是:
import re
def matchAll(pattern, list):
list_truth = list
for i in list:
list_truth[i] = re.search(pattern,i) != none
if False in list_truth:
return False
else:
return True
但是,它不起作用。请告诉我哪一部分我做错了。非常感谢!
例如,示例输入/输出如下所示:
print matchAll('a', ['a', 'ab', 'abc']) # True
print matchAll('a', ['a', 'ab', 'bc']) # False
print matchAll('(ab)?', ['a', 'ab', 'abc']) # True
print matchAll('.', ['a', 'ab', 'abc']) # True
print matchAll('.{2,3}', ['a', 'ab', 'abc']) # False
我还将代码修改为:
import re
def matchAll(pattern, list1):
list_truth = list
for i in list1:
if re.search(pattern,i) != None:
pass
else:
return False
return True
但是,它返回了正确的结果,但我认为这不是构造函数的好方法。有人知道我该如何优化它吗?谢谢!
最佳答案
您可以为此使用all
(Python内置)
def match_all(pattern, items)
return all(re.search(pattern, item) for item in items)
还要注意
list
是一个内置类型,请避免将其用于变量名re.search
的返回值是一个对象(truthy)或None
(falsy),这就是为什么返回值可以用作all
的布尔值在Python中,camelCase经常被snake_case替换(一个不祥的PEP-8辩论)
关于python - 如何在Python中收集一组 bool 值并返回结合了所有'AND'的最终测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36228369/