如何在Python中找到最大或最小项

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

本文旨在向想要使用Python查找最大或最小项的开发人员展示几种方法,并总结最佳方法。

阅读更多:Python 教程

方法一:使用列表切片

如果您只是想找到单个最小或最大项,即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 = 3)获取nsmallest
sorted(random_list)[:3]

输出

[1, 2, 3]
#使用切片方法(N = 3)获取nlargest
sorted(random_list)[-3:]

输出

[7, 8, 9]

方法二:列表的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项(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},]

#获得较少标题的选手(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}]
#获得最高标题的选手(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
# 定义数据
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)

输出

选手 标题
_________________
费德勒  20
纳达尔   19
德约科维奇 17

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

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

结果

选手 标题
_________________
穆雷    3
德约科维奇 17
纳达尔   19
df.nlargest(3,columns="titles")

结果

选手 标题
_________________
费德勒  20
纳达尔   19
德约科维奇 17

结论

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

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

同样,如果N的大小与集合本身的大小差不多,则通常先对其进行排序并取一个切片会更快。

总之,nlargest()和nsmallest()的实际实现是适应python操作的,将自动为您执行一些这些优化。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程