如何将数据列表映射到函数列表?

3 投票
5 回答
2939 浏览
提问于 2025-04-16 04:55

我有以下的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

撰写回答