说,我有以下排序的列表列表:
清单1:(12,24,36)
清单2:(3,5,12,24)
清单3:(36,41,69)
我想找出整个列表列表中每个元素的频率。我在python中想出了一个丑陋的模块,但我想知道是否有一些库函数..
编辑:请找到以下代码
def find_frequency(transactions,list):
freq = 0
for items_transaction in transactions:
flag = 0
for candidate in list:
if candidate not in items_transaction:
flag = 1
break
if flag == 0:
freq += 1
return freq
答案 0 :(得分:8)
Counter做我认为你正在寻找的东西:
>>> from itertools import chain
>>> from collections import Counter
>>> list1, list2, list3 = [12,24,36], [3,5,12,24], [36,41,69]
>>> Counter(chain(list1, list2, list3))
Counter({3: 1, 5: 1, 12: 2, 24: 2, 36: 2, 41: 1, 69: 1})
答案 1 :(得分:3)
您需要展平列表 - 也就是说,将其转换为所有值的单个长序列。可以使用itertools.chain
完成import collections, itertools
l = [[12,24,36], [3,5,12,24], [36,41,69]]
freq = collections.defaultdict(int) # 0 by default
for x in itertools.chain.from_iterable(l):
freq[x] += 1
print(freq)
答案 2 :(得分:0)
您可以使用其他一些海报所说的内容来平整列表,然后执行此类操作。
def numList(list):
dic = {}
for num in list:
if num in dic.keys():
dic[num] += 1
else:
key = num
value = 1
dic[key] = value
return dic
这将创建列表中所有数字及其频率的字典。字典键是数字,其值是频率。
答案 3 :(得分:0)
对于那些通过标题搜索列表列表的人来说,似乎一个简单的解决方案是:
from itertools import chain
from collections import Counter
list_of_lists = [[12,24,36], [3,5,12,24], [36,41,69]]
Counter(chain.from_iterable(list_of_lists)