Skip to main content
 首页 » 编程设计

python之将函数列表应用于对象列表

2025年05月04日12飞鱼

这有时会在 R 中出现,这对我来说意味着在 Python 中必须有一种方法可以做到这一点。如果我有函数列表,请说:

functions = [lambda s: s + 'hi world', lambda s: s + '_(O.o)_'] 

和输入列表:

inputs = ['Buy', 'use', 'break', 'fix', 'trash', 'melt'] 

如何将提供的所有函数应用到输入列表?对我来说,列表理解似乎允许我将其中一个函数应用于列表,但不能将它们同时应用于列表(无需将函数本身硬编码到代码中)。

澄清一下,我在这种情况下寻找的输出是:

output = ['Buyhi world_(O.o)_', 'usehi world_(O.o)_', 'breakhi world_(O.o)_' ... 

简而言之,我试图找到一种方法,不必为输入中的 i 编写 [f1(f2(f3(i)))],而是简单地列出一个'f' 并将它们全部应用于输入。

请您参考如下方法:

使用 nested list comprehension :

functions = [lambda s: s + 'hi world', lambda s: s + '_(O.o)_'] 
inputs = ['Buy', 'use', 'break', 'fix', 'trash', 'melt'] 
 
outputs = [func(ipt) for func in functions for ipt in inputs] 
print(outputs) 

输出

['Buyhi world', 'usehi world', 'breakhi world', 'fixhi world', 'trashhi world', 'melthi world', 'Buy_(O.o)_', 'use_(O.o)_', 'break_(O.o)_', 'fix_(O.o)_', 'trash_(O.o)_', 'melt_(O.o)_'] 

更新

鉴于您的问题的更新,您可以使用 reduce:

from functools import reduce 
 
functions = [lambda s: s + 'hi world', lambda s: s + '_(O.o)_'] 
inputs = ['Buy', 'use', 'break', 'fix', 'trash', 'melt'] 
 
outputs = [reduce(lambda x, f: f(x), functions, ipt) for ipt in inputs] 
print(outputs) 

输出

['Buyhi world_(O.o)_', 'usehi world_(O.o)_', 'breakhi world_(O.o)_', 'fixhi world_(O.o)_', 'trashhi world_(O.o)_', 'melthi world_(O.o)_']