是否可以将此地图/过滤器代码转换为列表理解?

时间:2011-12-28 15:17:33

标签: python map filter

我想要在单个字符串上运行的正则表达式列表。我不关心哪些表达式匹配,我只想要他们的结果(re.Match对象)。

当然,使用for循环很容易,但我想要更多的pythonic。这就是我现在所拥有的:

all_matches = map(lambda x: x.match(domain), 
                  (first_re, second_re, third_re))
matches = [m for m in all_matches if m]
但是,我觉得在我的皮肤下,它应该是可以理解的。它应该是什么样的,如果它可能的话呢?

另外,更常见的是 - 列表推导等同于map / filter还是只有m / f功能的子集?

2 个答案:

答案 0 :(得分:3)

可以将其写为简单的列表理解。但是,r.match(domain)必须进行两次评估:

matches = [r.match(domain) for r in (first_re, second_re, third_re) if r.match(domain)]

或者你必须写一个双列表理解:

matches = [a for a in (r.match(domain) for r in (first_re, second_re, third_re)) if a]

答案 1 :(得分:1)

通常,过滤器/地图可以写为列表理解(请参阅此处的documentation)。在这种情况下,您可以编写matches = [x.match(domain) for x in (first_re, second_re, third_re) if x.match(domain)]