在 Python 中查找列表中第二小的数字
Find the second smallest number in a List in Python
查找列表中第二小的数字:
- 使用
set()
该类将列表转换为set
. - 使用该
sorted()
函数获取排序列表。 - 访问索引处的列表项
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
。
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() 查找列表中第二小的数字
查找列表中第二小的数字:
- 使用
list.copy()
方法创建列表的副本。 - 使用
list.remove()
方法从副本中删除最小值。 - 使用该
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 循环查找列表中第二小的数字
查找列表中第二小的数字:
- 为最小和第二小的数字声明一个变量。
- 使用
for
循环遍历列表。 - 使用比较运算符查找第二小的数字。
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
变量。
如果满足条件,我们:
- 将
min2
变量设置为当前值min1
- 设置
min1
为当前迭代的次数
我们的elif
语句检查当前数字是否小于min2
和不等于min1
。
如果数字大于min1
和小于min2
,那么我们将当前数字分配给min2
变量。
最后一次迭代后,min2
变量存储列表中第二小的数字。