首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列表中计数重复对

在列表中计数重复对
EN

Stack Overflow用户
提问于 2022-02-14 21:30:01
回答 3查看 147关注 0票数 2

我有一个有数据挖掘元素的任务。我需要找出哪些作者在几个出版物的网页上协作最多。

我已经抓取了网页,并将作者的文本编成了一个列表。

我当前的输出如下:

代码语言:javascript
复制
for author in list:
   print(author)

##output :
['Author 1', 'Author 2', 'Author 3']
['Author 2', 'Author 4', 'Author 1']
['Author 1', 'Author 5', 'Author 6', 'Author 7', 'Author 4']

等等~100多行。

我的想法是,在列表的每个部分,生成另一个列表,其中包含该列表中的每个唯一对。例如,第三行演示将给出“作者1+作者5”、“作者1+作者6”、“作者1+作者7”、“作者1+作者4”、“作者5+作者6”、“作者5+作者7”、“作者5+作者4”、“作者6+作者7”、“作者6+作者4”、“作者7+作者4”。然后,我将这些对列表附加到一个大列表中,并将其放在一个计数器上,以查看哪些对出现得最多。

问题是,我只是不知道如何真正实现配对匹配器,所以如果有人有任何指针,那就太棒了。我相信答案不会那么复杂,但我一直找不到答案。关于如何衡量合作的其他想法也会很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-14 21:44:29

似乎您希望为给定的列表生成大小为2的所有子集。itertools将这样做:

代码语言:javascript
复制
import itertools
for author in lists:
    a = list(itertools.combinations(author, 2))
    print(a)
票数 3
EN

Stack Overflow用户

发布于 2022-02-14 21:36:27

您可以使用字典,其中对是键,数字发生的频率是值。您需要确保始终为(Author1,Author2)(Author2, Author1)生成相同的键,但是可以选择字母顺序来处理。

然后,当您遇到它时,只需增加为该对存储的数量。

票数 0
EN

Stack Overflow用户

发布于 2022-02-14 21:43:27

您只需使用itertools从列表中生成所有对,就可以使用它自己计算列表的笛卡尔积:

代码语言:javascript
复制
import itertools
a = ['Author 1', 'Author 5', 'Author 6', 'Author 7', 'Author 4']
list(itertools.product(a, a))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71118511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档