【问题标题】:Counting similar list element in a list计算列表中的相似列表元素
【发布时间】:2014-05-14 21:15:00
【问题描述】:

我有一个列表列表

list = [[1,0],[1,2],[1,1],[1,0]]

现在我想计算上述列表中类似列表元素的出现次数。 例如; [1,0]:2, [1,2]:1, [1,1]:1

我做到了

import collections
print Counter(list)

它抛出错误:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/collections.py", line 352, in __init__
    self.update(iterable, **kwds)
  File "/usr/local/lib/python2.7/collections.py", line 434, in update
    self[elem] = self_get(elem, 0) + 1
TypeError: unhashable type: 'list'

我做错了什么?

【问题讨论】:

    标签: python list collections


    【解决方案1】:

    Counter 在内部是一个字典。字典的键应该是 hashble。但是列表是可变的并且它们不是可散列的。那就是你不能照原样使用Counter

    一种选择是将嵌套列表元素转换为元组

    my_list = [[1,0],[1,2],[1,1],[1,0]]
    from collections import Counter
    print Counter(map(tuple, my_list))
    # Counter({(1, 0): 2, (1, 2): 1, (1, 1): 1})
    

    如果列表太大,那么你可以使用这样的生成器表达式

    print Counter(tuple(item) for item in my_list)
    

    这将避免在内存中创建新列表,这与map 不同。并且使用元组是有效的,因为元组是不可变的并且是可散列的。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,您应该能够像在前面的问题中那样使用 .count() 。 How can I count the occurrences of a list item in Python?

      【讨论】:

      • 我不知道我列表中的项目是什么。我将不得不找到独特的项目,然后计算每个项目以找到它的分布。我认为集合方法更短更整洁。
      猜你喜欢
      • 2020-05-29
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多