我有一个字符串列表和一个过滤器列表(也是字符串,要解释为正则表达式)。我想要一个列表,列出我的字符串列表中至少有一个过滤器接受的所有元素。理想情况下,我会写
[s for s in strings if some (lambda f: re.match (f, s), filters)]
其中一些被定义为
def some (pred, list):
for x in list:
res = pred (x)
if res:
return res
return False
这样的东西是否已经在Python中可用,或者是否有更惯用的方法来执行此操作?
答案 0 :(得分:19)
有一个名为any
的功能,大概是你想要的。我想你正在寻找这个:
[s for s in strings if any(re.match(f, s) for f in filters)]
答案 1 :(得分:7)
[s for s in strings if any(re.match (f, s) for f in filters)]
答案 2 :(得分:1)
Python lambda只是其LISP对应物的一小部分。
在python中,lambdas不能包含块,因此对于lambda
,for循环是不可能的我会使用一个闭包,这样你就不必每次都发送列表
def makesome(list):
def some(s)
for x in list:
if x.match(s):
return True
return False
return some
some = makesome(list)
[s for s in strings if some(s)]