计算Python

时间:2015-10-13 03:51:00

标签: python list

说,我有以下排序的列表列表:

清单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

4 个答案:

答案 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)