假设我得到一个元素列表,例如
[1,1,2,3,3,1,2]
或
["a","a","b","c","c"]
给定这样一个列表,我想构造一个(不一定是有序的)列表,其中包含每个元素的出现次数。例如,第一个列表应该返回
[3,2,2]
因为列表中有 3 个一、2 个二和 3 个三。第二个应该类似地返回
[2,1,2]
在 Python 中执行此操作的最佳方法是什么?
最佳答案
construct a (not necessarily ordered) list containing the number of occurrences of each element
既然你不担心顺序,你可以简单地使用collections.Counter
, 像这样
>>> from collections import Counter
>>> Counter([1, 1, 2, 3, 3, 1, 2]).values()
[3, 2, 2]
>>> Counter(["a", "a", "b", "c", "c"]).values()
[2, 2, 1]
Counter
对象只不过是一个字典,其键在可迭代对象中找到,值将是在可迭代对象中找到的相应键的实际次数。您可以打印 Counter
对象并检查它,就像这样
>>> Counter([1, 1, 2, 3, 3, 1, 2])
Counter({1: 3, 2: 2, 3: 2})
>>> Counter(["a", "a", "b", "c", "c"])
Counter({'a': 2, 'c': 2, 'b': 1})
由于您只对出现的次数感兴趣,因此我们只采用 values()
。
关于python - 构造列表中出现次数的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28745247/