【问题标题】:Lisp's "some" in Python?Lisp 在 Python 中的“一些”?
【发布时间】:2010-04-29 15:56:02
【问题描述】:

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

[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 中可用,还是有更惯用的方法来做到这一点?

【问题讨论】:

    标签: python lisp


    【解决方案1】:

    有一个名为any 的函数大致是你想要的。我想你正在寻找这个:

    [s for s in strings if any(re.match(f, s) for f in filters)]
    

    【讨论】:

      【解决方案2】:
      [s for s in strings if any(re.match (f, s) for f in filters)]
      

      【讨论】:

        【解决方案3】:

        Python lambda 的功能仅比 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)]
        

        【讨论】:

        • 你对 Python 的 lambdas 的评估是正确的,除了分数是 0.9。
        • 这里有一个很好的视角“就像看电影的预告片。令人兴奋,但并不完全真实。” rapd.wordpress.com/2007/05/09/lambda-in-python - 虽然从 lispers 的角度来看,我不喜欢他对干净代码的热情,给我功能。
        猜你喜欢
        • 1970-01-01
        • 2022-10-24
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 2012-08-06
        相关资源
        最近更新 更多