【问题标题】:How to find the frequency of elements that are list of list? [duplicate]如何找到列表列表中元素的频率? [复制]
【发布时间】:2018-02-22 11:58:43
【问题描述】:

我正在尝试获取列表中每个列表的频率。 以下是我的代码

from collections import Counter
my_list=[[1,2,3],[1,2,3]]
ctr=[]
ctr = Counter(my_list)
print(ctr[[1,2,3]])

此代码适用于数字列表,即如果 my_list=[1,2,3]。但是对于列表列表它不起作用。 ctr[[1,2,3]] 应该打印 2 但有如下错误

  TypeError: unhashable type: 'list'

有人可以帮忙吗?

【问题讨论】:

  • 错误信息有什么不清楚的地方? Counter 创建一个字典,你不能有一个带有list 类型键的字典。所以它失败了。
  • 当你调用两个列表相同时,你是指它们的元素的顺序还是只是元素的顺序
  • 重要的是它们元素的顺序

标签: python


【解决方案1】:

一个解决方案:

from collections import Counter

lst = [[1,2,3],[1,2,3]]

ctr = Counter(map(tuple, lst))

ctr[(1,2,3)]
# 2

说明

  • Counter 实例是字典,因此需要不可变 键。元组是不可变的,而列表则不是。
  • 此外,Counter 实例接受任何可迭代的,而不仅仅是列表。
  • 懒惰地执行元组转换意味着您不必创建 一份新的清单。

【讨论】:

  • 我更喜欢这个版本! +1
【解决方案2】:

问题是Counter 创建了一个字典,而你不能拥有一个带有list 类型键的字典。因此,当您提供列表列表时,它会失败。要解决这个问题,请将内部列表转换为元组,如下所示:

from collections import Counter

my_list  = [[1, 2, 3], [1, 2, 3]]
new_list = [tuple(x) for x in my_list]  # or overwrite with my_list = ..

ctr = Counter(new_list)    
print(ctr[(1, 2, 3)])  # -> 2

【讨论】:

  • 你的意思是Counter(new_list)
  • @Jean-FrançoisFabre 哎呀.. 错字。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2019-05-12
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多