我面临一个特殊的问题,最近我觉得需要产生某种类型的列表理解。
例如:
[ re.search('xyz', l).group(0) for l in my_list if re.search('xyz', l) ]
现在,敏锐的读者可能已经观察到这个列表理解确实进行了两次正则表达式匹配。
我想消除这种“额外”的开销,以某种方式失去了列表推导的优雅。以前有人遇到过这样的问题吗?如果是这样,他们是如何解决的?
一般来说f()
,我有一个函数应用于列表中的值/对象x
,现在我希望f(x).b
在我的列表中包含当且仅当f(x).a
满足某些条件时。
我知道
empty_list = []
for l in my_list:
match = re.search('xyz', l)
if match:
empty_list.append(match.group(0))
或更一般地说:
empty_list = []
for x in my_list:
val = f(x)
if val.a == condition:
empty_list.append(val.b)
是一个可能的解决方案,但这似乎太冗长了,我敢肯定有一种更“pythonic”的方式来做到这一点。