Lisp在Python中的“一些”?

时间:2010-04-29 15:56:02

标签: python lisp

我有一个字符串列表和一个过滤器列表(也是字符串,要解释为正则表达式)。我想要一个列表,列出我的字符串列表中至少有一个过滤器接受的所有元素。理想情况下,我会写

[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中可用,或者是否有更惯用的方法来执行此操作?

3 个答案:

答案 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)]