python 对list中的每个元素处理,Python:将函数列表应用于列表中的每个元素

Say I have list with elements content = ['121\n', '12\n', '2\n', '322\n'] and list with functions fnl = [str.strip, int].

So I need to apply each function from fnl to each element from content sequentially.

I can do this by several calls map.

Another way:

xl = lambda func, content: map(func, content)

for func in fnl:

content = xl(func, content)

I'm just wondering if there is a more pythonic way to do it.

Without separate function? By single expression?

解决方案

You could use the reduce() function in a list comprehension here:

[reduce(lambda v, f: f(v), fnl, element) for element in content]

Demo:

>>> 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]

This applies each function in turn to each element, as if you nested the calls; for fnl = [str.strip, int] that translates to int(str.strip(element)).

In Python 3, reduce() was moved to the functools module; for forwards compatibility, you can import it from that module from Python 2.6 onwards:

from functools import reduce

results = [reduce(lambda v, f: f(v), fnl, element) for element in content]

Note that for the int() function, it doesn't matter if there is extra whitespace around the digits; int('121\n') works without stripping of the newline.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值