首页 > 解决方案 > 我想计算每个一起出现的元组

问题描述

我是新的顶级 python 并希望您的支持进行以下操作。我有如下列表:

item = [[8, 28], [8, 33], [8, 38], [8, 43], [13, 18], [13, 23],
        [13, 28], [13, 33], [13, 38], [13, 43], [18, 23], [18, 28],
        [18, 33], [18, 38], [18, 43], [23, 28], [23, 33], [23, 38],
        [23, 43], [28, 33], [28, 38], [28, 43], [33, 38], [33, 43],
        [38, 43], [4, 9], [4, 14], [4, 19], [4, 24], [4, 29], [4, 34],
        [4, 39], [4, 44], [9, 14], [9, 19], [9, 24], [9, 29], [25, 30],
        [25, 35], [25, 40], [25, 45], [30, 35], [30, 40], [30, 45]]

我想获得每个元组一起发生的计数,我尝试应用此代码:

collection.Counter(item)

发生以下错误:

count_elements(self, iterable)
TypeError: unhashable type: 'list'

标签: pythonlist

解决方案


您有一个列表列表,您可以将列表转换为元组,然后collection.Counter(item)可以工作:

from collections import Counter

item_lists = [[8, 28], [8, 33], [8, 38], [8, 43], [13, 18], [13, 23], [13, 28],
              [13, 33], [13, 38], [13, 43], [18, 23], [18, 28], [18, 33],
              [18, 38], [18, 43], [23, 28], [23, 33], [23, 38], [23, 43],
              [28, 33], [28, 38], [28, 43], [33, 38], [33, 43], [38, 43],
              [4, 9], [4, 14], [4, 19], [4, 24], [4, 29], [4, 34], [4, 39],
              [4, 44], [9, 14], [9, 19], [9, 24], [9, 29], [25, 30], [25, 35],
              [25, 40], [25, 45], [30, 35], [30, 40], [30, 45]]

item_tuples = [tuple(l) for l in item_lists]
print(Counter(item_tuples))

输出:

Counter({(8, 28): 1, (8, 33): 1, (8, 38): 1, (8, 43): 1, (13, 18): 1, (13, 23): 1, (13, 28): 1, (13, 33): 1, (13, 38): 1, (13, 43): 1, (18, 23): 1, (18, 28): 1, (18, 33): 1, (18, 38): 1, (18, 43): 1,(23, 28): 1, (23, 33): 1, (23, 38): 1, (23, 43): 1, (28, 33): 1, (28, 38): 1, (28, 43): 1, (33, 38): 1, (33, 43): 1, (38, 43): 1, (4, 9): 1, (4, 14):1, (4, 19): 1, (4, 24): 1, (4, 29): 1, (4, 34): 1, (4, 39): 1, (4, 44): 1, (9, 14): 1, (9, 19): 1, (9, 24): 1, (9, 29): 1, (25, 30): 1, (25, 35): 1, (25, 40): 1, (25, 45): 1, (30, 35): 1, (30, 40): 1, (30, 45): 1})

注意:目前,您的所有项目似乎只在原始列表中存在一次。


推荐阅读