这有时会在 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)_']
