问题的提出和解决方案概述
在这篇文章中,你将学习如何在Python中找到第二大的 List元素。
为了增加趣味性,我们有以下的运行方案。
*Rivers服装公司目前正在审查其未来六(6)个月的预计收入。作为他们的IT专家,你以列表的形式保存了这些数据。现在,他们希望看到第二大 *List元素。
问题是:我们如何编写Python代码来检索第二大的 List 元素?
我们可以通过以下方法之一来完成这项任务。
- 方法1:使用
sorted()和slicing - 方法2:使用
List Comprehension和slicing - 方法3:使用
set(),max()和slicing - 方法4:使用
[np.partition()](https://numpy.org/doc/stable/reference/generated/numpy.partition.html) - 方法5:使用
heapq.nlargest()
方法1:使用sorted()和slicing
这个方法使用了Python的一个内置字符串函数。 sorted()来对 List.然后 slicing被应用来返回第二大的元素。
projected = [25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64]
result = sorted(projected)[-2]
print(result)
这段代码声明了一个 ListRivers Clothing未来六(6)个月的预计收入,并将其保存到projected 。
下一步: sorted()被传递给一个(1)参数,projected ,并按升序排序(默认)。
输出
如果result 被发送到终端**,而没有**应用 slicing(sorted(projected))所有 List元素显示。
[25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64]
要检索第二大元素,请将 slicing到List(sorted(projected)[-2])。
40376.33
注意:你也可以通过参数(reverse=True)来进行降序排序。然后,应用 slicing检索第二大元素
(result = sorted(projected, reverse=True)[1])。
方法2:使用列表理解法和切片法
这个方法使用 List Comprehension和 max()来评估每个 List元素并返回第二大元素。
projected = [888888888, 25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64, 999999999]
result = max([x for x in projected if x < max(projected)])
print(result)
# 888888888
这段代码声明了一个 List的Rivers Clothing未来六(6)个月的预测收入,并将其保存到projected 。
下一步。 List Comprehension对每个元素进行评估。如果当前值小于最大的元素,它将被追加到result
([x for x in projected if x < max(projected)] )。
输出
如果result 被发送到终端**,而没有应用 slicing(sorted(projected)),所有的** 元素都会显示**(除了**最大值:44875.64)。
[25348.91, 28997.78, 32655.12, 36209.56, 40376.33]
要检索第二大的元素,请应用 slicing到List(sorted(`projected`)[-1]).
40376.33
方法3:使用set()、max()和分片法
这个方法与方法2相似。然而,这个方法从一个可迭代的(List)中的重复内容,方法是在排序前应用 set()然后再进行排序。如果重复是一个问题,请选择这个选项。
projected = [25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64]
result = sorted(set(projected))[-2]
print(result)
这段代码声明了一个 ListRivers Clothing未来六(6)个月的预测收入,并将其保存到projected 。
下一步。 set()调用了一个参数,projected ,并删除了重复的值。然后,将 List被排序,(默认),按升序排列,并保存到result 。
输出
如果result 被发送到终端**,而没有应用 slicing(sorted(set(projected))),所有唯一的**元素都会显示。
[25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64]
要检索第二大元素,请应用 slicing到List(sorted(set(projected))[-2])。
40376.33
方法4:使用np.partition()
这个方法在 numpy库,并使用 np.partition()来自动对 List以升序排列,并返回相同的结果。
在进行任何数据操作之前,需要安装一(1)个新库。
- 该 NumPy库除了支持多维数组和矩阵外,还支持一系列的数学函数。
要安装这个库,请导航到IDE终端。在命令提示符下($),执行下面的代码。对于本例中使用的终端,命令提示符是一个美元符号($)。你的终端提示可能不同。
$ pip install numpy
点击键盘上的<Enter> 键,开始安装过程。
如果安装成功,终端上会显示一条信息,表明这一点。
在每个代码片段的顶部添加以下代码。这段代码将使本文中的代码能够无误地运行。
import numpy as np
projected = [25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64]
result = np.partition(projected, -3)[-2]
print(result)
这段代码声明了一个 ListRivers Clothing未来六(6)个月的预计收入,并将其保存到projected 。
下一步。 np.partition()被调用并传递了两(2)个参数:可迭代的 `projected`和要分割的元素索引 (-2)
输出
如果result 被发送到终端**,而没有**应用 slicing(np.partition(`projected`, -2))所有的 元素都显示出来。
[28997.78 25348.91 32655.12 36209.56 40376.33 44875.64] |
要检索第二大的元素,请应用 slicing到List(np.partition(`projected`, -2)[-2]).
40376.33 |
方法5:使用heapq.nlargest()
这个方法调用了Python的内置 heapq库来使用 nlargest()对迭代器进行排序,并返回最大的x 个元素。
import heapq
projected = [25348.91, 28997.78, 32655.12, 36209.56, 40376.33, 44875.64]
result = heapq.nlargest(2, projected)[-1]
print(result)
这段代码声明了一个 ListRivers服装公司未来六(6)个月的预计收入,并将其保存到projected 。
下一步。 heapq.nlargest()被调用并传递了两(2)个参数:要返回的排序元素的数量和一个可迭代元素。 `projected`.
输出
如果result ,而不应用 slicing(heapq.nlargest(2, `projected`)),则显示最高的两(2)个元素。
[44875.64, 40376.33] |
要检索第二大的元素,请将 slicing到List(heapq.nlargest(2, `projected`)[-1]).
40376.33 |
摘要
有更多的例子可以完成这个任务。然而,我们为文章选择了五(5)个最流行的选项。
这应该给你足够的信息来选择最适合你的编码要求。
祝您好运,打码愉快!