有时在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)_' ...
简而言之,我正在尝试寻找一种无需编写[f1(f2(f3(i))) for i in inputs]
的方法,而只是拥有一个'f'列表并将它们全部应用于输入。
答案 0 :(得分:6)
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)_']
答案 1 :(得分:1)
通过这个特定的函数示例,您可以尝试结合使用functools.reduce
和列表理解:
from functools import reduce
functions = [lambda s: s + 'hi world', lambda s: s + '_(O.o)_']
inputs = ['Buy', 'use', 'break', 'fix', 'trash', 'melt']
[reduce(lambda inp, f: f(inp), functions, i) for i in inputs]
# ['Buyhi world_(O.o)_', 'usehi world_(O.o)_', 'breakhi world_(O.o)_', 'fixhi world_(O.o)_', 'trashhi world_(O.o)_', 'melthi world_(O.o)_']
答案 2 :(得分:0)
这可能不是最有效的方法。我首先学习Java,因此循环(或流)感觉很直观。但是,以下给出了答案。
functions = [lambda s: s + 'hi world', lambda s: s + '_(O.o)_']
inputs = ['Buy', 'use', 'break', 'fix', 'trash', 'melt']
for i, the_input in enumerate(inputs):
for f in functions:
the_input = f(the_input) # keep answer between loops
inputs[i] = the_input # overwrite start value (could use a list and append)
print(inputs)
#['Buyhi world_(O.o)_',
# 'usehi world_(O.o)_',
# 'breakhi world_(O.o)_',
# 'fixhi world_(O.o)_',
# 'trashhi world_(O.o)_',
# 'melthi world_(O.o)_']