如何将数据列表映射到函数列表?
我有以下的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 个回答
2
这段代码的意思是:我们有两个东西,一个叫做数据(data),另一个叫做函数(funcs)。这里的代码在做的事情是,把这两个东西一一配对,然后对每一对进行操作。具体来说,它会把每个函数(f)应用到对应的数据(d)上,最后把结果放在一个列表里。
3
map()
可以与一系列函数一起使用,虽然可能不是你想的那样:
data = ['1', '4.6', 'txt']
funcs = [int, float, str]
result = list(map(lambda f,d: f(d), funcs, data))
# or
result = list(map(lambda d,f: f(d), data, funcs))
9
你可以使用 zip 来把多个序列合并在一起:
zip([a,b,c,...], [x,y,z,...]) == [(a,x), (b,y), (c,z), ...]
然后你可以遍历这个新合成的序列,让每个函数在对应的数据上运行。因为你只是想把它们收集到一个列表里,列表推导式 比起普通的 for 循环要简单得多:
result = [f(x) for f, x in zip(funcs, data)]
注意:* 如果你在用 Python 2.x 并且列表很长,可以使用 itertools.izip
。