
假设有一个包含重复整数的列表:[1, 2, 3, 4, 2, 3, 4, 5],我们需要统计其中有多少个不重复的整数。答案显然是5个(1,2,3,4,5)。
这个问题看似简单,但实际应用中常伴随复杂场景:
核心思路:利用集合(Set)元素的唯一性自动去重。
my_list = [1, 2, 3, 4, 2, 3, 4, 5] unique_values = set(my_list) # 转换为集合 count = len(unique_values) # 获取集合长度 print(count) # 输出:5
原理说明:
性能特点:
核心思路:用字典存储每个整数的出现次数,最后统计字典键的数量。
my_list = [1, 2, 3, 4, 2, 3, 4, 5] count_dict = {} for num in my_list: count_dict[num] = count_dict.get(num, 0) + 1 # 存在则+1,否则初始化为1 count = len(count_dict) print(count) # 输出:5
原理说明:
扩展应用:
性能特点:
核心思路:使用Python标准库中的Counter类,专为计数设计。
from collections import Counter my_list = [1, 2, 3, 4, 2, 3, 4, 5] counter = Counter(my_list) # 自动统计频次 count = len(counter) # 获取唯一值数量 print(count) # 输出:5
进阶用法:
# 获取出现次数最多的3个整数 print(counter.most_common(3)) # 输出:[(2, 2), (3, 2), (4, 2)] # 数学运算(支持加减交并集) counter2 = Counter([5,6,6,7]) print(counter + counter2) # 合并统计 print(counter & counter2) # 交集统计
性能特点:
方法 | 时间复杂度 | 空间复杂度 | 适用场景 |
---|---|---|---|
集合去重法 | O(n) | O(n) | 仅需简单计数 |
字典计数法 | O(n) | O(n) | 需要频次信息的中小型数据 |
Counter类 | O(n) | O(n) | 需要复杂统计的大型数据 |
选型建议:
需求:统计服务器日志中不同IP的访问次数,找出访问最频繁的10个IP。
from collections import Counter # 模拟日志数据(每行包含IP地址) log_lines = [ "192.168.1.1 - - [timestamp] \"GET / HTTP/1.1\"", "10.0.0.5 - - [timestamp] \"POST /api\"", "192.168.1.1 - - [timestamp] \"GET /css/style.css\"", # ...(百万级日志数据) ] # 提取IP地址 ips = [line.split()[0] for line in log_lines] # 统计并输出结果 ip_counter = Counter(ips) print("不同IP数量:", len(ip_counter)) print("Top10 IP:", ip_counter.most_common(10))
代码解释:
不同整数的计数问题看似简单,实则蕴含多种解决方案。在Python生态中:
随着数据规模的增长,合理选择数据结构变得尤为重要。对于智能时代的开发者而言,掌握这些计数方法,就如同拥有了精准的数字显微镜,能够高效洞察数据背后的规律。
以上就是Python统计不同整数的出现次数的三种方法的详细内容,更多关于Python统计不同整数出现次数的资料请关注本站其它相关文章!