0

0

Python 找出列表中出现频率最高的数字

花韻仙語

花韻仙語

发布时间:2025-07-23 15:38:02

|

664人浏览过

|

来源于php中文网

原创

python 找出列表中出现频率最高的数字

本文将提供一个高效的Python函数,用于找出列表中出现频率最高的数字。该函数在多个数字具有相同最高频率的情况下,返回数值较大的那个。我们将探讨一种使用 defaultdict 的优化方法,并提供不使用 defaultdict 的替代方案,同时对比不同方案的性能。

使用 defaultdict 找出最高频率数字

以下代码展示了如何使用 collections.defaultdict 来高效地找出列表中出现频率最高的数字。

from collections import defaultdict

def highest_rank(arr):
    count = defaultdict(int)
    highest_rank = 0
    highest_rank_cnt = 0
    for num in arr:
        cnt = count[num] + 1
        count[num] = cnt
        if cnt > highest_rank_cnt or (cnt == highest_rank_cnt and num > highest_rank):
            highest_rank = num
            highest_rank_cnt = cnt
    return highest_rank

代码解释:

  1. defaultdict(int): 创建一个默认值为整数0的字典。这意味着,当我们尝试访问一个尚未存在的键时,它会自动创建一个值为0的键,避免了 KeyError 异常。
  2. 循环遍历 arr: 对于列表中的每个数字,我们增加其在 count 字典中的计数。
  3. 更新 highest_rank: 在每次迭代中,我们检查当前数字的计数是否大于当前最高频率 highest_rank_cnt,或者计数是否相等但当前数字大于 highest_rank。如果是,则更新 highest_rank 和 highest_rank_cnt。

示例:

立即学习Python免费学习笔记(深入)”;

科威旅游管理系统
科威旅游管理系统

该软件是以php+MySQL进行开发的旅游管理网站系统。系统前端采用可视化布局,能自动适应不同尺寸屏幕,一起建站,不同设备使用,免去兼容性烦恼。系统提供列表、表格、地图三种列表显示方式,让用户以最快的速度找到所需行程,大幅提高效率。系统可设置推荐、优惠行程,可将相应行程高亮显示,对重点行程有效推广,可实现网站盈利。系统支持中文、英文,您还可以在后台添加新的语言,关键字单独列出,在后台即可快速翻译。

下载
print(highest_rank([9, 48, 1, 8, 44, 45, 32]))  # 输出 48

不使用 defaultdict 的替代方案

如果不希望使用 defaultdict,可以使用传统的 if num not in count 检查:

def highest_rank_no_defaultdict(arr):
    count = {}
    highest_rank = 0
    highest_rank_cnt = 0
    for num in arr:
        if num not in count:
            cnt = 1
        else:
            cnt = count[num] + 1
        count[num] = cnt
        if cnt > highest_rank_cnt or (cnt == highest_rank_cnt and num > highest_rank):
            highest_rank = num
            highest_rank_cnt = cnt
    return highest_rank

虽然这种方法也能得到正确的结果,但它比使用 defaultdict 稍微冗长且效率略低。

性能对比

使用 defaultdict 的方法通常比使用 arr.count(i) 的方法效率更高。这是因为 arr.count(i) 在每次迭代中都会完整地遍历列表,而 defaultdict 只需要一次遍历即可统计所有元素的频率。以下是一个简单的性能测试:

import numpy as np
from collections import defaultdict
import time

def highest_rank(arr):
    count = defaultdict(int)
    highest_rank = 0
    highest_rank_cnt = 0
    for num in arr:
        cnt = count[num]+1
        count[num]=cnt
        if cnt > highest_rank_cnt or (cnt == highest_rank_cnt and num > highest_rank):
            highest_rank = num
            highest_rank_cnt = cnt
    return highest_rank

def highest_rank_slow(arr):
    count_num = {}
    for i in arr:
        if i not in count_num:
            count_num[i] = 0
        else:
            count_num[i] = arr.count(i)
    return max(count_num,key=lambda x:(count_num.get(x),x))

nums = list(np.random.randint(0,1000,10_000))

start_time = time.time()
highest_rank(nums)
end_time = time.time()
print(f"highest_rank time: {end_time - start_time}")

start_time = time.time()
highest_rank_slow(nums)
end_time = time.time()
print(f"highest_rank_slow time: {end_time - start_time}")

测试结果表明,使用 defaultdict 的方法在处理大型列表时具有显著的性能优势。

总结

本文提供了一个高效的Python函数,用于找出列表中出现频率最高的数字。通过使用 collections.defaultdict,我们可以避免重复遍历列表,从而提高性能。虽然不使用 defaultdict 也能实现相同的功能,但推荐使用 defaultdict 以获得更好的效率。在选择实现方法时,请根据实际需求和性能要求进行权衡。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

611

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

334

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号