如何将元组数据映射到函数元组?

时间:2010-10-03 06:26:29

标签: python function mapping arguments tuples

我有以下Python代码:

data  = ['1', '4.6', 'txt']
funcs = [int, float, str]

如何使用相应索引中的数据作为函数的参数调用每个函数? 现在我正在使用代码:

result = []
for i, func in enumerate(funcs):
    result.append(func(data[i]))

map(funcs,data)不能使用函数元组(是否有内置函数可以更简单?

5 个答案:

答案 0 :(得分:8)

您可以use zip *将多个序列组合在一起:

zip([a,b,c,...], [x,y,z,...]) == [(a,x), (b,y), (c,z), ...]

然后您可以迭代这个新序列并使每个函数都应用于相应的数据。由于您只想将它​​们收集到列表中,list comprehension比for循环要好得多:

result = [f(x) for f, x in zip(funcs, data)]

注意:*如果您使用的是Python 2.x,则使用itertools.izip且列表很长。)

答案 1 :(得分:2)

[f(d) for d,f in zip(data, funcs)]

答案 2 :(得分:2)

>>> data  = ['1', '4.6', 'txt']
>>> funcs = [int, float, str]
>>> result = [funcs[pos](x) for pos, x in enumerate(data)]
>>> result
[1, 4.5999999999999996, 'txt']
>>> 

答案 3 :(得分:2)

map() 使用函数序列,但可能不是您想象的那样:

data  = ['1', '4.6', 'txt']
funcs = [int, float, str]

result = map(lambda f,d: f(d), funcs, data)
# or
result = map(lambda d,f: f(d), data, funcs)

答案 4 :(得分:0)

如果您需要逐个值,您还可以为值创建生成器:

def my_funcvals(funcs,vals):
    return ("%s(%r) = %r" %(f.__name__,d, f(d)) for d,f in zip(data, funcs))

data  = ['1', '4.6', 'txt']
funcs = [int, float, str]

for result in my_funcvals(funcs, data):
    print result