本文针对希望使用Python查找最大或最小项目的开发人员。我将展示一些使用方法,并为您总结最佳方法。
如果您只是想查找单个最小或最大项,即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]
# Find the smallest number (N=1) min (random_list)
1
# Find the largest number (N=1) max (random_list)
9
同样,如果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]
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 }]
好吧,世界是由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的运行方式,并将代表您执行其中的一些优化。