Python中求前N个最大数与最小数


Python中求前N个最大数与最小数

问题1:我想找到一个列表中最大的三个元素

nums=[1,5,8,-1,67,54,1111,89,-9,20,67,34,80]

方法:

>>> import heapq

>>> print(heapq.nlargest(3,nums))

[1111, 89, 80]

最小的三个元素:

>>> print(heapq.nsmallest(3,nums))

[-9, -1, 1]

问题2:如果元素不是一个整数列表,而是一个字典组成的列表呢?

>>> files=[

{'name':'apple','price':100},

{'name':'thinkpad','price':500},

{'name':'samsung','price':200},

{'name':'IBM','price':700},

{'name':'huawei','price':1000}

]

>>> cheap=heapq.nsmallest(3,files,key=lambda s:s['price'])

>>> cheap

[{'name': 'apple', 'price': 100 }, {'name': 'samsung', 'price': 200 }, {'name': 'thinkpad', 'price': 500 }]

>>> expensive=heapq.nlargest(2,files,key=lambda s:s['price'])

>>> expensive

[{'name': 'huawei', 'price': 1000 }, {'name': 'IBM', 'price': 700 }]

lambda表达式介绍:

对于简单的函数,存在一种简便的表示方式,即:lambda表达式

# ###################### 普通函数 ######################

# 定义函数(普通方式)

def func(arg):

return arg + 1

# 执行函数

result = func(123)

# ###################### lambda ######################

# 定义函数(lambda表达式)

my_lambda = lambda arg : arg + 1

# 执行函数

result = my_lambda(123)

和内置的max,min函数比较

>>> a = [-9, -8, 1, 3, -4, 6]

>>> max(a)

6

这个默认用法,如果想找出绝对值最大的那个元素,该如何做呢?

>>> max(a,key=lambda x:abs(x))

-9

字典组成的列表:

>>> files=[

{'name':'apple','price':100},

{'name':'thinkpad','price':500},

{'name':'samsung','price':200},

{'name':'IBM','price':700},

{'name':'huawei','price':1000}

]

>>> max(files,key=lambda x:x['price'])

{'price': 1000, 'name': 'huawei'}

>>>


希望对你有帮助,欢迎大家转发。