gpt4 book ai didi

python - 在 python 中,如何将两个具有关联计数列表的非常大的列表合并为一个具有关联计数列表的列表?

转载 作者:行者123 更新时间:2023-12-05 08:36:31 24 4
gpt4 key购买 nike

首先,请注意我一般使用“列表”这个词。我怀疑最好的解决方案是利用某种集合,例如有序字典、“有序集”等。

我使用两个列表表示对象集合——一个对象列表和一个计数列表。对象列表包含对象,每个对象都是唯一的。对象由长整数表示。第二个列表与第一个列表对齐,项目是整数,表示对象列表中每个关联对象在集合中的数量(计数,如直方图)。

唯一对象的可能数量是巨大的,比如2**64。然而在实践中,一个集合中可能会有 20,000-30,000 个独特的对象。

现在,给定两个集合:集合 A(由列表 obj_Acnt_A 表示)和集合 B(由列表 obj_B 表示code>cnt_B), 我需要将它们组合/添加到一个新的集合 C 中。因此,我需要找到 A 中也存在于 B 中的所有对象,并对这些对象的 A 和 B 计数求和对象。仅在 A 或仅在 B 中的对象将保留其各自集合中的计数。

例如,在下面的列表中,对象 750 在两个列表中,因此组合集合 C 中 750 的计数是 A 和 B 集合中计数的总和。

ojb_A = [4903, 750, 29868, 833]
cnt_A = [1, 3, 24, 3 ]

ojb_B = [2357, 39, 750, 38 ]
cnt_B = [8, 52, 6, 2 ]

将 A 和 B 组合成 C 得到:

ojb_C = [4903, 750, 29868, 833, 2357, 39,  38]
cnt_C = [1, 9, 24, 3, 8, 52, 2 ]

正如最初提到的,我怀疑为了提高效率需要对象列表的一些有序表示,尽管我没有按照上面示例中的顺序显示项目。

[编辑]:我刚刚发现 collections.Counter 可能满足我的需求。但同样,我的收藏有大量独特的对象,所以我正在寻找一种高效/快速的解决方案。

最佳答案

您可以使用 defaultdict 来计算所有计数:

from collections import defaultdict

ojb_A = [4903, 750, 29868, 833]
cnt_A = [1, 3, 24, 3 ]

ojb_B = [2357, 39, 750, 38 ]
cnt_B = [8, 52, 6, 2 ]

def count(out, ojb, cnt):
for index,obj in enumerate(ojb):
out[obj] += cnt[index]

def split_out(out):
return list(out.keys()), list(out.values())

out = defaultdict(int)
count(out, ojb_A, cnt_A)
count(out, ojb_B, cnt_B)

ojb_C, cnt_C = split_out(out)
print(ojb_C, cnt_C)

关于python - 在 python 中,如何将两个具有关联计数列表的非常大的列表合并为一个具有关联计数列表的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68685280/

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