Ответ 1
Существует функция, называемая any
, которая вам грубо нужна. Я думаю, вы ищете это:
[s for s in strings if any(re.match(f, s) for f in filters)]
У меня есть список строк и список фильтров (которые также являются строками, которые должны интерпретироваться как регулярные выражения). Мне нужен список всех элементов в моем списке строк, которые принимаются хотя бы одним из фильтров. В идеале я бы написал
[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, или есть более идиоматический способ сделать это?
Существует функция, называемая any
, которая вам грубо нужна. Я думаю, вы ищете это:
[s for s in strings if any(re.match(f, s) for f in filters)]
[s for s in strings if any(re.match (f, s) for f in filters)]
Python лямбда является только такой же мощной, как и их копии LISP.
В python lambdas не может включать блоки, поэтому цикл for невозможен для lambda
Я бы использовал закрытие, так что вам не нужно отправлять список каждый раз
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)]