Skip to main content
 首页 » 编程设计

python之在列表列表中查找最频繁出现的对

2025年05月04日13powertoolsteam

我有一个数据集,表示许多技术报告的作者列表。每份报告可以由一个或多个人撰写:

a = [ 
['John', 'Mark', 'Jennifer'], 
['John'], 
['Joe', 'Mark'], 
['John', 'Anna', 'Jennifer'], 
['Jennifer', 'John', 'Mark'] 
] 

我必须找到最频繁的配对,即过去合作次数最多的人:

['John', 'Jennifer'] - 3 times 
['John', 'Mark'] - 2 times 
['Mark', 'Jennifer'] - 2 times 
etc... 

如何在 Python 中执行此操作?

请您参考如下方法:

使用 collections.Counter 字典和 itertools.combinations:

from collections import Counter 
from itertools import combinations 
 
d  = Counter() 
for sub in a: 
    if len(a) < 2: 
        continue 
    sub.sort() 
    for comb in combinations(sub,2): 
        d[comb] += 1 
 
print(d.most_common()) 
[(('Jennifer', 'John'), 3), (('John', 'Mark'), 2), (('Jennifer', 'Mark'), 2), (('Anna', 'John'), 1), (('Joe', 'Mark'), 1), (('Anna', 'Jennifer'), 1)] 

most_common() 将按照从最常见到最少的顺序返回配对,如果您想要第一个 n 最常见的,只需传递 n d.most_common(n)