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

ifl*_*ly6 1 python

这有时出现在R中,这对我来说意味着必须有一种方法可以在Python中实现这一点.如果我有一个功能列表,请说:

functions = [lambda s: s + 'hi world', lambda s: s + '_(O.o)_']
Run Code Online (Sandbox Code Playgroud)

和输入列表:

inputs = ['Buy', 'use', 'break', 'fix', 'trash', 'melt']
Run Code Online (Sandbox Code Playgroud)

如何应用提供给输入列表的所有功能?对我来说,列表推导似乎允许我将一个函数应用于列表,但不是两个函数(不将函数本身硬编码到代码中).

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

output = ['Buyhi world_(O.o)_', 'usehi world_(O.o)_', 'breakhi world_(O.o)_' ...
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ejo 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)
Run Code Online (Sandbox Code Playgroud)

产量

['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)_']
Run Code Online (Sandbox Code Playgroud)

UPDATE

鉴于您的问题更新,您可以使用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)
Run Code Online (Sandbox Code Playgroud)

产量

['Buyhi world_(O.o)_', 'usehi world_(O.o)_', 'breakhi world_(O.o)_', 'fixhi world_(O.o)_', 'trashhi world_(O.o)_', 'melthi world_(O.o)_']
Run Code Online (Sandbox Code Playgroud)

  • 同样的@Idlehands很好!+1 (2认同)