gpt4 book ai didi

python - 使用 map 解包 iterable

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:12 25 4
gpt4 key购买 nike

假设我有两个相同长度的数字迭代

weights = range(0, 10)
values = range(0, 100, 10)

我需要计算加权总和。我知道这可以通过列表理解来完成

weighted_sum = sum(weight * value for weight, value in zip(weights, values))

我想知道是否可以使用 map 来完成和 operator.mul喜欢

import operator

weighted_sum = sum(map(operator.mul, zip(weights, values)))

但这会报错

Traceback (most recent call last):
File "<input>", line 3, in <module>
TypeError: op_mul expected 2 arguments, got 1

所以我的问题是:有没有什么方法可以使用 map 将未打包的元组传递给函数?

最佳答案

map 不需要zip,直接使用

weighted_sum = sum(map(operator.mul, weights, values))

来自 map's Documentation

If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel.

map 的文档中还提到,您可以使用 itertools.starmap而不是 map 已经 zipped 的输入。


作为Rahul hinted at ,在处理数字时使用 numpy 总是一个好主意,实际上是这样的

import numpy as np

np.asarray(weights) * values

已经可以解决这个问题(尽管与 map 相比,这要求两个数组的长度相同,而 map 会映射最短的长度)。

关于python - 使用 map 解包 iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44039648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com