Python:计算列表中元素对的频率

2024-09-26 18:12:21 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我有一个关于“会议”的数据集。 例如,A,B,C有一个会议,那么列表将是[A,B,C]。 像这样,每个名单都会包含一份参加会议的成员名单。 因此:

第1行=(A、B、C)

第2行=(A、C、D、E)

第3行=(D,F,G)

。。。在

我只想计算一下每对成员见面的次数。 例如,成员A从第1行和第2行与C相遇两次,成员B从第1行与C相遇一次。所以,我想做一个这样的图表。。在

    A  B  C  D E F G...

 A  .  1  2  1 ...  

 B  1  . 1  0 

 C

。。。在

一开始我以为这很容易,但我很困惑。 请帮帮我,提前谢谢你。在


Tags: 数据列表图表成员会议次数名单帮帮我
3条回答

对于2D数组或dict,这是一个非常简单的数据结构问题。如果你有很多人,数组的效率会更高,但我假设你没有

times_met = defaultdict(int)
for line in lines:
     for pair in itertools.combinations(line, 2)
         times_met[pair] += 1

# How many times person a meets person b is described by the following (s.t. a < b)
print times_met[(a, b)]

请注意,如果您有大量的会议,并且可能存在更高效的算法,那么这是非常低效的。在

看起来你应该可以用矩阵加法来解决这个问题。如果你知道总人数(问题中是G),那么你的答案就是GxG矩阵。用第1行的组合创建一个GxG矩阵,然后用第2行的组合添加GxG矩阵,等等

与其手动求和频率,不如使用^{}^{}

from collections import Counter
from itertools import chain, combinations

meets = Counter(chain.from_iterable(combinations(line, 2) for line in lines))

其中lines是名称的iterable。在

相关问题 更多 >

    热门问题