
python统计不同数字的个数
用户关注问题
我有一个数字列表,想知道里面有多少个不同的数字,Python应该怎么做?
使用集合(set)统计不同数字的个数
Python中可以利用集合(set)的无重复元素特性,将列表转换成集合,然后用len()函数获取集合的大小,即为不同数字的个数。例如:
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
unique_count = len(set(numbers))
print(unique_count) # 输出5
如果我有一个包含大量数字的数据集,用常规方法统计不同数字会不会很慢?有什么更有效率的解决办法?
采用集合或字典结构提升统计效率
对于大型数据集,使用集合(set)依然很高效,因为其底层实现是哈希表,查找和插入操作平均复杂度为O(1)。如果需要同时统计每个数字出现的次数,可以利用collections模块中的Counter,同时统计种类数和频率十分方便。示例:
from collections import Counter
numbers = [...] # 大量数字列表
counter = Counter(numbers)
unique_count = len(counter)
print(unique_count)
除了知道不同数字有多少,我还想知道它们各自出现了多少次,该怎么实现?
利用collections.Counter统计频次分布
collections模块的Counter类非常适合此需求。它可以接受一个序列作为参数,返回一个字典,键为数字,值为该数字的出现次数。示例代码如下:
from collections import Counter
numbers = [1,2,2,3,3,3,4]
counter = Counter(numbers)
print(counter) # 输出Counter({3: 3, 2: 2, 1: 1, 4: 1})