Python:将函数列表应用于列表中的每个元素

xiº*_*xiº 3 python lambda python-2.7

说我有列表元素content = ['121\n', '12\n', '2\n', '322\n']和列表与功能fnl = [str.strip, int].

所以我需要fnlcontent顺序地将每个函数应用到每个元素.我可以通过几个电话来做到这一点map.

其他方式:

xl = lambda func, content: map(func, content)
for func in fnl:
    content = xl(func, content) 
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有更多的pythonic方式来做到这一点.

没有单独的功能?通过单一表达?

Mar*_*ers 10

你可以在列表理解中使用这个reduce()函数:

[reduce(lambda v, f: f(v), fnl, element) for element in content]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> content = ['121\n', '12\n', '2\n', '322\n']
>>> fnl = [str.strip, int]
>>> [reduce(lambda v, f: f(v), fnl, element) for element in content]
[121, 12, 2, 322]
Run Code Online (Sandbox Code Playgroud)

这会依次将每个函数应用于每个元素,就像嵌套调用一样; 因为fnl = [str.strip, int]这转化为int(str.strip(element)).

在Python 3中,reduce()被移动到functools模块 ; 为了向前兼容,您可以从Python 2.6开始从该模块导入它:

from functools import reduce

results = [reduce(lambda v, f: f(v), fnl, element) for element in content]
Run Code Online (Sandbox Code Playgroud)

请注意,对于该int()函数,如果数字周围有额外的空格并不重要; int('121\n')在没有剥离换行符的情况下工作.