gpt4 book ai didi

python - 具有列表理解的不同模式

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:47 25 4
gpt4 key购买 nike

我遇到了一个特殊的问题,最近我觉得有必要生成某种类型的列表理解。

例如:

[ 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”的方式可以做到这一点。

最佳答案

使用生成器理解:

# Your original list of data.
my_list = []

# This 'knows' how to produce a new list of elements where each
# element satisfies some test, here represented as `predicate`.
# Looks like a list comprehension, but note the surrounding parens.
passing = (x for x in my_list if predicate(x))

# This knows how to apply some function `f` to each element in the list.
mapped = (f(x) for x in passing)

# Now use the know-how above to actually create your list.
# Note that because you're using chained generators, you are
# only iterating over the original list once!
results = list(mapped)

# Or if you don't need all the intermediate values at once...
for el in mapped:
do_something_with(el)

关于python - 具有列表理解的不同模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19660276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com