gpt4 book ai didi

python - 对具有相等值的列表求和和聚合

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:24 24 4
gpt4 key购买 nike

我有一对长度相同的列表,第一个包含 int 值,第二个包含 float 值。我希望用另一对可能更短但长度相同的列表替换它们,其中第一个列表将仅包含唯一值,第二个列表将包含每个匹配值的总和。也就是说,如果新对中第一个列表的第 i 个元素是 x,并且原始对中的第一个列表中出现了 x 的索引是 i_1,...,i_k,则新对中第二个列表的第 i 个元素应包含索引 i_1,...,i_k< 中值的总和 在原始对的第二个列表中。

举个例子。

输入:

([1, 2, 2, 1, 1, 3], [0.1, 0.2, 0.3, 0.4, 0.5, 1.0])

我们的输出:

([1, 2, 3], [1.0, 0.5, 1.0])

我试图在这里做一些列表理解技巧但失败了。我可以为此编写一个愚蠢的循环函数,但我相信这里应该有更好的东西。

最佳答案

不是单线的,但由于您还没有发布您的解决方案,我会建议使用 collections.OrderedDict 的解决方案:

>>> from collections import OrderedDict
>>> a, b = ([1, 2, 2, 1, 1, 3], [0.1, 0.2, 0.3, 0.4, 0.5, 1.0])
>>> d = OrderedDict()
>>> for k, v in zip(a, b):
... d[k] = d.get(k, 0) + v
...
>>> d.keys(), d.values()
([1, 2, 3], [1.0, 0.5, 1.0])

当然,如果顺序无关紧要,那么最好使用 collections.defaultdict :

>>> from collections import defaultdict
>>> a, b = ([1, 'foo', 'foo', 1, 1, 3], [0.1, 0.2, 0.3, 0.4, 0.5, 1.0])
>>> d = defaultdict(int)
>>> for k, v in zip(a, b):
d[k] += + v
...
>>> d.keys(), d.values()
([3, 1, 'foo'], [1.0, 1.0, 0.5])

关于python - 对具有相等值的列表求和和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24823689/

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