Python 中的 Lisp "some"?
我有一个字符串的列表,还有一个过滤器的列表(这些过滤器也是字符串,应该被当作正则表达式来理解)。我想要一个新的列表,里面包含我字符串列表中至少被一个过滤器接受的所有元素。理想情况下,我会这样写
[s for s in strings if some (lambda f: re.match (f, s), filters)]
其中“some”是这样定义的
def some (pred, list):
for x in list:
res = pred (x)
if res:
return res
return False
在Python中有没有类似的功能,或者有没有更符合习惯的做法呢?
3 个回答
1
Python中的lambda表达式功能比LISP中的要弱很多。
在Python中,lambda表达式不能包含代码块,所以在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)]
7
在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的功能和自己想要的不太一样。这种情况下,大家通常会在网上寻找解决方案,比如在StackOverflow上提问。
在提问时,最好能把遇到的问题描述得清楚一些,比如说你在做什么,遇到了什么错误,或者你希望实现什么功能。这样其他人才能更好地理解你的问题,并给出有效的建议。
有时候,问题的解决方案可能涉及到一些代码示例,大家可以通过这些示例更直观地理解问题所在。记得在提问时附上相关的代码,这样能帮助别人更快地找到问题的根源。
总之,提问时清晰明了是非常重要的,这样才能得到更好的帮助。
[s for s in strings if any(re.match (f, s) for f in filters)]
23
有一个叫做 any
的函数,它大致上可以满足你的需求。我觉得你在找的就是这个:
[s for s in strings if any(re.match(f, s) for f in filters)]