我试图定义一个函数,如果模式匹配列表中的所有字符串,则返回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/

10-15 00:34
查看更多