0

0

查找数组中频率最高的数字:Python 教程

聖光之護

聖光之護

发布时间:2025-07-23 15:54:29

|

380人浏览过

|

来源于php中文网

原创

查找数组中频率最高的数字:python 教程

本文旨在提供一个高效的 Python 函数,用于查找数组中出现频率最高的数字。如果多个数字具有相同的最高频率,该函数将返回其中最大的数字。我们将探讨使用 defaultdict 的优化实现,并提供不使用 defaultdict 的替代方案,同时对比不同实现的性能差异。

使用 defaultdict 实现

collections.defaultdict 是 Python 中一个非常有用的数据结构,它可以简化计数操作。当尝试访问 defaultdict 中不存在的键时,它会自动使用指定的默认值创建该键。这避免了手动检查键是否存在的需求,从而使代码更简洁易读。

以下是使用 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

代码解释:

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

  1. from collections import defaultdict: 导入 defaultdict 类。
  2. count = defaultdict(int): 创建一个 defaultdict 对象,默认值为整数 0。
  3. highest_rank = 0: 初始化 highest_rank 变量,用于存储当前频率最高的数字。
  4. highest_rank_cnt = 0: 初始化 highest_rank_cnt 变量,用于存储当前最高频率。
  5. for num in arr:: 遍历输入数组 arr。
  6. cnt = count[num] + 1: 增加数字 num 的计数。如果 num 之前不在 count 中,defaultdict 会自动创建 num 键并将其值初始化为 0,然后再加 1。
  7. count[num] = cnt: 更新数字 num 的计数。
  8. if cnt > highest_rank_cnt or (cnt == highest_rank_cnt and num > highest_rank):: 检查当前数字 num 的频率是否高于当前最高频率,或者频率相同但 num 大于当前的 highest_rank。如果是,则更新 highest_rank 和 highest_rank_cnt。
  9. return highest_rank: 返回频率最高的数字。

示例:

MeloCool
MeloCool

AI歌曲生成器 - 歌词转歌曲AI音乐制作器在线工具

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

不使用 defaultdict 的实现

如果不希望使用 defaultdict,可以使用标准的 dict 以及 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 的版本的功能相同,但它显式地检查数字是否已存在于 count 字典中。

性能比较

使用 defaultdict 的实现通常比不使用的实现略快,因为它可以避免每次访问计数器时进行额外的键检查。以下是一个简单的性能比较示例:

import timeit
import random

def highest_rank_defaultdict(arr):
    from collections import defaultdict
    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_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

# 创建一个包含 10000 个随机整数的数组
arr = [random.randint(0, 1000) for _ in range(10000)]

# 测量使用 defaultdict 的函数的执行时间
time_defaultdict = timeit.timeit(lambda: highest_rank_defaultdict(arr), number=1000)

# 测量不使用 defaultdict 的函数的执行时间
time_no_defaultdict = timeit.timeit(lambda: highest_rank_no_defaultdict(arr), number=1000)

print(f"使用 defaultdict 的执行时间: {time_defaultdict:.4f} 秒")
print(f"不使用 defaultdict 的执行时间: {time_no_defaultdict:.4f} 秒")

在大多数情况下,使用 defaultdict 的版本会略快,但差异可能很小,具体取决于输入数据的分布和大小。

总结

本文介绍了如何使用 Python 查找数组中频率最高的数字。我们探讨了使用 defaultdict 和不使用 defaultdict 的两种实现方式,并比较了它们的性能。使用 defaultdict 通常是更简洁和高效的选择,但在某些情况下,不使用 defaultdict 的实现可能更适合。在选择实现方式时,请考虑您的具体需求和性能要求。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

845

2023.08.22

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

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

203

2023.11.20

string转int
string转int

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

950

2023.08.02

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

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

605

2024.08.29

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

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

294

2025.08.29

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

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

212

2025.08.29

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

548

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

27

2025.12.22

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

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

精品课程

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

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

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

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