在 Python 中查找列表中第二小的数字

在 Python 中查找列表中第二小的数字

Find the second smallest number in a List in Python

查找列表中第二小的数字:

  1. 使用set()该类将列表转换为set.
  2. 使用该sorted()函数获取排序列表。
  3. 访问索引处的列表项1以获取第二小的数字。
主程序
def second_smallest(l): return sorted(set(l))[1] print(second_smallest([1, 1, 3, 5, 7])) # 👉️ 3 print(second_smallest([1, 3, 5, 7])) # 👉️ 3

我们使用set()该类将列表转换为 aset以删除任何重复项。

sorted函数从 iterable 中的项目返回一个新的排序列表。

最后一步是访问 index 处的列表元素1

Python 索引是从零开始的,因此列表中的第一项的索引为,最后一项的索引为 0-1 len(my_list) - 1

如果您认为1是列表中第二小的数字,请使用下一个代码片段。

使用 heapq.nsmallest() 查找列表中第二小的数字

使用该heapq.nsmallest()方法查找列表中第二小的数字,例如second_smallest = heapq.nsmallest(2, my_list)[1]
heapq.nsmallest()方法返回一个列表,其中包含提供的可迭代对象中的 N 个最小元素。

主程序
import heapq second_smallest = heapq.nsmallest(2, [1, 1, 3, 5, 7])[1] print(second_smallest) # 👉️ 1 second_smallest = heapq.nsmallest(2, [1, 3, 5, 7])[1] print(second_smallest) # 👉️ 3

heapq.nsmallest

方法返回一个列表,其中包含来自提供的可迭代对象的 N 个最小元素

我们使用该方法获取列表中的 2 个最小数字,并访问 index 处的列表元素1以获取第二小的数字。

主程序
import heapq print(heapq.nsmallest(2, [1, 3, 5, 7])) # 👉️ [1, 3] print(heapq.nsmallest(2, [1, 3, 5, 7])[1]) # 👉️ 3

或者,您可以使用该list.remove()方法。

使用 list.remove() 查找列表中第二小的数字

查找列表中第二小的数字:

  1. 使用list.copy()方法创建列表的副本。
  2. 使用list.remove()方法从副本中删除最小值。
  3. 使用该min()函数获取第二小的值。
主程序
def second_smallest(l): list_copy = l.copy() min_value = min(list_copy) list_copy.remove(min_value) return min(list_copy) print(second_smallest([1, 1, 3, 5, 7])) # 👉️ 1 print(second_smallest([1, 3, 5, 7])) # 👉️ 3

我们使用该list.copy()方法创建列表的副本。

min函数返回可迭代对象中的最小项或两个或多个参数中最小的一个。

主程序
my_list = [10, 5, 20] result = min(my_list) print(result) # 👉️ 5

然后我们使用该list.remove()方法从列表的副本中删除最小值。

list.remove()方法从列表中

删除第一项,其值等于传入的参数。

最后一步是将列表的副本传递给min()函数以获取第二小的数字。

或者,您可以使用for循环。

使用 for 循环查找列表中第二小的数字

查找列表中第二小的数字:

  1. 为最小和第二小的数字声明一个变量。
  2. 使用for循环遍历列表。
  3. 使用比较运算符查找第二小的数字。
主程序
def second_smallest(l): min1 = min2 = float('inf') for number in l: if number < min1: min2 = min1 min1 = number elif number < min2 and number != min1: min2 = number return min2 print(second_smallest([1, 1, 3, 5, 7])) # 👉️ 3 print(second_smallest([1, 3, 5, 7])) # 👉️ 3

我们使用for循环来迭代数字列表。

min1变量代表列表中最小的数字,变量min2代表第二小的数字。

在每次迭代中,我们检查当前数字是否小于min1
变量。

如果满足条件,我们:

  1. min2变量设置为当前值min1
  2. 设置min1为当前迭代的次数

我们的elif语句检查当前数字是否小于min2和不等于min1

如果数字大于min1和小于min2,那么我们将当前数字分配给min2变量。

最后一次迭代后,min2变量存储列表中第二小的数字。