按频率对 Python 列表元素进行排序2025年3月17日 | 阅读 8 分钟 您将获得一个包含重复元素的列表。目标是根据元素出现的频率按降序排列这些元素。 例如,假设我们有一个列表 = [2, 2, 2, 2, 3, 1, 1, 1, 4, 4],其中每个数字代表列表中的一个元素。此列表中元素的出现频率为:2 出现四次,3 出现一次,1 出现三次,4 出现两次。根据频率排序后的列表将是 [2, 2, 2, 2, 1, 1, 1, 4, 4, 3],其中出现频率最高的元素排在前面。 在 Python 中实现目标有多种方法。下面列出了一些有效且高效的方法 方法 1 - 使用 Python 字典计算每个元素的频率并根据频率计数进行排序。程序可以总结如下:
这是用于按频率对列表元素进行排序的 Python 程序 输出 list_1 = [2, 3, 2, 8, 5, 6, 8, 6, 5, 2, 8] Sorted list_1 = [2, 2, 2, 8, 8, 8, 5, 5, 6, 6, 3] list_2 = [1, 4, 1, 4, 5, 4, 3, 3, 5, 2, 1] Sorted list_2 = [1, 1, 1, 4, 4, 4, 5, 5, 3, 3, 2] 说明 上面的程序创建了一个名为 freq_dict 的字典来存储唯一元素的频率。然后,它使用 for 循环遍历输入列表中的每个元素。然后,它检查该元素是否存在于 freq_dict 中。如果是,则将频率加 1 并继续下一个迭代。否则,创建一个新键并将频率设置为 1。 之后,它使用 sorted 函数对 freq_dict 进行排序,并将频率计数作为键传递。同时,将 reverse 设置为 True,这将按频率降序对字典进行排序。 最后,它创建一个名为 sorted_list 的列表来存储元素。然后,它将迭代字典中每个键的频率次数,并将它们存储在 sorted_list 中。最后,它返回按频率排序的元素列表。 时间复杂度 = O(n logn): 使用 for 循环遍历列表中的每个元素来计算频率。使用的 sorted 算法的最坏时间复杂度为 O(n logn)。 空间复杂度 = O(n):我们使用了两个数据结构 sorted_dict 和 sorted_list,它们的大小取决于输入列表的大小。在最坏的情况下,空间复杂度为 O(n),其中 n 是列表中的元素数量。 方法 2 - 使用 collections 的 Counter 来计算每个元素的频率并根据频率计数进行排序。我们可以使用 collections 中的 Counter 来减少方法 1 中的代码行数并优化代码。 程序可以总结如下:
输出 list_1 = [2, 3, 2, 8, 5, 6, 8, 2, 6, 5, 2, 8] Sorted list_1 = [2, 2, 2, 2, 8, 8, 8, 5, 5, 6, 6, 3] list_2 = [1, 4, 1, 1, 4, 5, 4, 3, 3, 5, 2, 1] Sorted list_2 = [1, 1, 1, 1, 4, 4, 4, 5, 5, 3, 3, 2] 说明 上面的程序创建了一个 Counter 对象,将输入列表作为参数传递,并将 Counter 对象(一个字典)存储在 freq_dict 中。 sorted() 函数的 key 参数接受一个 lambda 函数作为输入,其中 lambda 函数接受列表中的一个元素 x 并返回一个元组 (a, b),其中
最后,函数返回一个排序后的列表。 时间复杂度 = O(n logn): sorted 算法的最坏情况时间复杂度为 O(n logn) 空间复杂度 = O(n):排序列表的大小取决于输入列表的大小。在最坏的情况下,它可以是 O(n)。 方法 3 - 使用 字典推导式 和带 lambda 函数的 sorted() 函数。程序可以总结如下:
输出 list_1 = [2, 3, 2, 8, 5, 6, 8, 2, 6, 5, 2, 8] Sorted list_1 = [2, 2, 2, 2, 8, 8, 8, 5, 5, 6, 6, 3] list_2 = [1, 4, 1, 1, 4, 5, 4, 3, 3, 5, 2, 1] Sorted list_2 = [1, 1, 1, 1, 4, 4, 4, 3, 3, 5, 5, 2] 说明 在上面的程序中,我们实现了字典推导式的思想来创建一个字典。lst.count(x) 返回该元素在列表中出现的频率,该频率作为 x 的值存储在 freq_dict 中。 然后,我们使用 sorted 函数根据列表中每个元素的频率计数对字典进行排序。在 key 参数中,我们传递了一个 lambda 函数,该函数返回一个元组 (-a, b),其中 a 是 b 的频率计数,b 是元素本身。通过取频率的负值,我们正在对列表进行降序排序。在出现平局的情况下,元素按升序排序,这就是 b 发挥作用的地方。最后,函数返回一个排序后的列表。 时间复杂度 = O(n logn): sorted 算法的最坏情况时间复杂度为 O(n logn) 空间复杂度 = O(n):排序列表的大小取决于输入列表的大小。在最坏的情况下,它可以是 O(n)。 下一个主题Python 按元素长度对列表进行排序 |
时间序列预测简介 一系列在恒定时间间隔内记录度量值称为时间序列。根据频率,时间序列可以分为以下几类:年度(例如,年度预算)季度(例如,支出)月度(例如,空中交通)每周(例如,...
阅读 16 分钟
?YouTube是互联网上最受欢迎的视频分享平台之一。它拥有数百万个涵盖各种主题的视频。如果你对某个特定主题感兴趣,很可能有一个YouTube播放列表涵盖该主题。播放列表是...
11 分钟阅读
在本教程中,我们将编写 Python 程序来查找对给定列表进行排序所需的最少交换次数。我们有一个包含 n 个不同元素的数组,我们需要找到对数组进行排序所需的最少交换次数...
5 分钟阅读
Selenium 是一个强大的自动化工具,广泛用于网络应用程序测试和网络抓取。虽然 Selenium 提供了与 Web 元素交互和导航网页的各种策略,但有时您需要更高级的功能来执行特定任务。其中一项此类高级功能是...
阅读 4 分钟
如何使用 Python 写入文本文件?读写文件以用于存储或以后使用是编程中的常见任务。Python 有多种处理文件的方法,但我们将特别关注写入文本文件。文本文件是...
阅读 6 分钟
引言 Python 是一种被全球开发人员使用的编程语言。Python 的基本特性之一是面向对象编程(OOP)。它允许程序员创建对象、类和实例。在本文中,我们将详细讨论 Python 实例并进行演示...
阅读 6 分钟
当我们写信、电子邮件等时,我们都会犯拼写错误,或者我们称之为打字错误。即使在撰写这篇文章时,也犯了很多错误。为了帮助解决这些情况,我们依赖助手或一些应用程序。您知道使用 Python,您可以...
阅读9分钟
在Python中,reduce()是一个内置函数,它将一个给定的函数应用于一个可迭代对象的元素,将它们减少为单个值。reduce()的语法如下:functools.reduce(function, iterable[, initializer]) function参数是一个接收两个参数并返回单个值的函数....
5 分钟阅读
数据分区是 PySpark 中的一种技术,它将大数据分成更小、更易于管理的数据块,称为分区。数据分区使 Spark 能够并行处理数据,从而提高性能并减少处理时间。在本文中,我们将讨论数据...
阅读 4 分钟
介绍:在本教程中,我们讨论如何使用 Python 中的 Asyncio 创建 telnet 客户端。Telnet 是一种使用 TCP/IP 进行连接的客户端/服务器软件协议。Telnet 协议允许用户登录并使用远程计算机,即使他们是直接连接到它的...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India