微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python中列表中列表的成对比较中元素的频率

如何解决Python中列表中列表的成对比较中元素的频率

我有一个这样的列表清单:

my_list_of_lists = 
[['sparrow','sparrow','junco','jay','robin'],['sparrow','robin','robin']]

我想对所有列表的每个位置进行成对比较,如下所示:

#1 with 2
['sparrow','robin']
['sparrow','robin']

#1 with 3
['sparrow','robin']

#2 with 3
['sparrow','robin']

因此1与2的配对:

pairs =[('sparrow','sparrow'),('sparrow','junco'),('junco',('jay','robin'),('robin','robin')]

我想在每次成对比较中获得对的计数和频率:

pairs =[('sparrow','sparrow') ('junco','robin')]

sparrowsparrow_counts = 2
juncosparrow_counts = 2
jayrobin_counts = 1
robinrobin = 1

frequency_of_combos = [('sparrow','sparrow'):.333,'junco'):.333,'robin'):.167,'robin'): .167]

我尝试压缩,但最终将所有列表(不是成对的)压缩到元组中,其余的我都感到困惑。

我认为它与How to calculate counts and frequencies for pairs in list of lists?有点相关,但是我不知道如何将其应用于我的数据。

解决方法

压缩两个列表,然后过滤掉不匹配的对,并使用collections.Counter对它们进行计数:

from collections import Counter

a = ['sparrow','sparrow','junco','jay','robin']
b = ['sparrow','robin','robin']
c = Counter([ i for i in zip(a,b) if i[0] == i[1]])
print(c)


Counter({('sparrow','sparrow'): 2,('robin','robin'): 1})

您似乎已经弄清楚了频率部分,但这应该可以清除zip和Counter的使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。