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

本文针对希望使用Python查找最大或最小项目的开发人员。我将展示一些使用方法,并为您总结最佳方法。

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

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

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

import random
# Create a random list of integers
random_list = random.sample(range(1,10),9)
random_list

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

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

# Find the smallest number (N=1)
min
(random_list)

1

# Find the largest number (N=1)
max
(random_list)

9

找到3个最小和最大的项目(N = 3)

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

# lets get the nsmallest using a slice approach(N=3)
sorted(random_list)[:3]

[1,2,3]

# lets get the nlargest using a slice approach(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 items (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)

头衔
播放器

默里3
德约科维奇17
纳达尔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与集合本身的大小大致相同,则通常先对其进行排序并进行切片会更快。

总之,python的实际实现nlargest()nsmallest()适应python的运行方式,并将代表您执行其中的一些优化。

猜你喜欢