在Python中的值列表中压缩并应用函数列表

Pau*_*ith 15 python

是否有惯用和/或优雅的Python用于压缩在值列表中应用函数列表?

例如,假设您有一个函数列表:

functions = [int, unicode, float, lambda x: '~' + x + '~']
Run Code Online (Sandbox Code Playgroud)

和值列表:

values = ['33', '\xc3\xa4', '3.14', 'flange']
Run Code Online (Sandbox Code Playgroud)

有没有办法将第i个函数应用于第i个值并返回相同长度的转换值的列表,同时避免这种丑陋的列表理解?

[functions[i](values[i]) for i in range(len(functions))] # <- ugly
Run Code Online (Sandbox Code Playgroud)

我想要的是zip()+ map()(zipmap()!)带有值列表的函数列表,并将函数应用于它们的配对值.我认为itertools可能提供一些相关的东西,但函数类似于imap并且starmap用于将单个函数映射到可迭代的,而不是可迭代的函数而不是另一个迭代.

Ign*_*ams 23

[x(y) for x, y in zip(functions, values)]
Run Code Online (Sandbox Code Playgroud)

  • 这是可以的,除了变量名的选择 - 不会`[f(x)表示f,x表示zip(函数,值)]`有点漂亮吗?;-) (7认同)
  • @Paul Smith,这种事情不需要被标准库覆盖的原因之一是python具有列表推导.它们是语言中不可或缺的一部分,应在适当的地方使用.他们在这里很合适. (2认同)

Ben*_*son 22

这些解决方案似乎过于复杂: map已经拉开了它的论点:

map(lambda x,y:x(y), functions, values)
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢迭代器版本:

from itertools import imap
imap(lambda x,y:x(y), functions, values)
Run Code Online (Sandbox Code Playgroud)