如何在 Python 中查找最大或最小项?

pythonserver side programmingprogramming更新于 2026/2/15 13:00:17

本文面向希望使用 Python 查找最大或最小项的开发人员。我将展示几种使用方法,并总结出最适合您的方法。

方法 – 1:列表上的切片方法

如果您只是想找到单个最小或最大项目,即 N = 1,使用 min() 和 max() 会更快。

让我们从生成一些随机整数开始。

import random
# 创建一个随机整数列表
random_list = random.sample(range(1,10),9)
random_list

输出

[2, 4, 5, 1, 7, 9, 6, 8, 3]

查找最小 &最大项目(N=1)

# 查找最小数字(N=1)
min
(
random_list
)

输出

1
# 查找最大数字(N=1)
max
(
random_list
)

输出

9

查找最小的 3 个 &最大的项目(N=3)

同样,如果 N 与集合本身的大小大致相同,通常先对其进行排序,然后取 N 的切片会更快。

# 让我们使用切片方法获取最小的 n 个项目(N=3)
sorted(random_list)[:3]

输出

[1, 2, 3]
# 让我们使用切片方法获取最大的 n 个项目(N=3)
sorted(random_list)[-3:]

输出

[7, 8, 9]

方法 – 2:列表上的 heapq 方法

heapq 模块有两个函数—nlargest() 和 nsmallest(),可用于查找 nsmallest 或 nlargest 项。

import heapq
import random
random_list = random.sample(range(1,10),9)

# nsmallest 项(N=3)
heapq.nsmallest(3,random_list)

输出

[1, 2, 3]
# nlargest items (N=3)
heapq.nlargest(3,random_list)

输出

[9, 8, 7]

如果您有更复杂的数据,heapq 函数有一个可以使用的关键参数。

import heapq
grandslams = [
{'name':'Roger Federer','titles':20},
{'name:'Rafel Nadal','titles':19},
{'name':'Novak Djokovic','titles':17},
{'name':'Andy Murray','titles':3},]

# Players with less titles (N=3)
less = heapq.nsmallest(3,grandslams,
key = lambdas:s['titles'])
less

输出

[{'name': 'Andy Murray', 'titles': 3},
{'name': 'Novak Djokovic', 'titles': 17},
{'name': 'Rafel Nadal', 'titles': 19}]
# Players with highest titles (N=3)
more = heapq.nlargest(3,grandslams,key = lambdas:s['titles'])
more

输出

[{'name': 'Roger Federer', 'titles': 20}, {'name': 'Rafel Nadal', 'titles': 19}, {'name': 'Novak Djokovic', 'titles': 17}]

从 DataFrame 中查找 N 个最大和最小值。

好吧,世界是由 CSV 文件组成的,是的!

因此,可以非常安全地假设,在 Python 开发的某个阶段,您会遇到 CSV 和 DataFrame。

我将向您展示几种从 DataFrame 中查找 N 个最大/最小值的方法。

在第一种方法中,我们将使用 sort_values() 方法对值进行排序,并使用 head 方法获取值。

import pandas as pd
import io
# Define your data
data = """
player,titles
Djokovic,17
Nadal,19
Federer,20
Murray,3
"""
throwaway_storage = io.StringIO(data)
df = pd.read_csv(throwaway_storage,index_col = "player")


# nsmallest (N = 3)
df.sort_values("titles").head(3)

输出

player title
_______________
Murray    3
Djokovic 17
Nadal    19


# nlargest (N = 3)
df.sort_values("titles",ascending = False).head(3)

输出

player title
_______________
Federer  20
Nadal    19
Djokovic 17

我们可以调用 .nsmallest() 和 .nlargest() 方法,而不是对行进行排序并使用 .head() 方法。

df.nsmallest(3,columns="titles")

输出

player title
_______________
Murray    3
Djokovic 17
Nadal    19


df.nlargest(3,columns = "titles")

输出

player title
_______________
Federer  20
Nadal    19
Djokovic 17

结论

如果您尝试查找相对较少的项目,则 nlargest() 和 nsmallest() 函数最合适。

如果您只是尝试查找单个最小或最大项目(N=1),则使用 min() 和 max() 会更快。

同样,如果 N 与集合本身的大小大致相同,则通常先对其进行排序并进行切片会更快。

总之,nlargest() 和 nsmallest() 的实际实现与 Python 的操作方式相适应,并将为您执行其中一些优化。


相关文章


有用资源