Python 如何找到属于列表的元素的频率?
我试图获得列表中每个列表的频率。 下面是我的代码Python 如何找到属于列表的元素的频率?,python,Python,我试图获得列表中每个列表的频率。 下面是我的代码 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' 有人能帮忙吗?问题
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'
有人能帮忙吗?问题是
计数器创建了一个字典,而您不能拥有一个带有列表
类型键的字典。因此,当您提供一个列表列表时,它会失败。要解决此问题,请将内部列表转换为元组,如下所示:
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
问题是,计数器
创建了一个字典,并且不能有一个带有列表
类型键的字典。因此,当您提供一个列表列表时,它会失败。要解决此问题,请将内部列表转换为元组,如下所示:
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
一个解决方案:
from collections import Counter
lst = [[1,2,3],[1,2,3]]
ctr = Counter(map(tuple, lst))
ctr[(1,2,3)]
# 2
解释
计数器
实例是字典,因此要求不可变
钥匙。元组是不可变的,而列表不是
- 此外,
计数器
实例接受任何iterable,而不仅仅是列表
- 惰性地执行元组转换意味着您不必创建
一份新的名单
一种解决方案:
from collections import Counter
lst = [[1,2,3],[1,2,3]]
ctr = Counter(map(tuple, lst))
ctr[(1,2,3)]
# 2
解释
计数器
实例是字典,因此要求不可变
钥匙。元组是不可变的,而列表不是
- 此外,
计数器
实例接受任何iterable,而不仅仅是列表
- 惰性地执行元组转换意味着您不必创建
一份新的名单
关于错误消息有什么不清楚的地方<代码>计数器
创建一个字典,您不能拥有一个带有列表
类型键的字典。所以它失败了。当你调用两个相同的列表时,你是指它们的元素的顺序,还是仅仅是元素的顺序?这甚至是它们的元素的顺序,这很重要,但错误消息并不清楚<代码>计数器创建一个字典,您不能拥有一个带有列表
类型键的字典。所以它失败了。当你调用两个相同的列表时,你是指它们的元素的顺序,还是仅仅是元素的顺序?这甚至是它们的元素的顺序,这一点很重要。你是指计数器(新列表)
@Jean-Françoisfare-Oops。。打字错误谢谢你是说计数器(新列表)
@Jean-Françoisfare-Oops。。打字错误谢谢我更喜欢这个版本+1我更喜欢这个版本+1.