PTYHON-COOKBOOK学习记录-3

heapq模块:用python简易得到最大最小值(很好用,性能强)
1.heapq中,有nlargest()和nsmallest()函数,可以很快的得到一个复杂数据中的n个最大值或者最小值:使用如下:


PTYHON-COOKBOOK学习记录-3_第1张图片
image.png

运行结果如下:


PTYHON-COOKBOOK学习记录-3_第2张图片
image.png

以此可以很快得到一个数据中的最大最小值。

顺便解释一下lambda,lambda是python中自带的一个函数,可以通过它创建一个匿名函数(不需要名字的函数,不理解没关系请看下面的解释)。

以代码做解释:


PTYHON-COOKBOOK学习记录-3_第3张图片
image.png

比如上面的17,18行代码中,我们需要根据portfolio这个复杂列表中字典中的‘price’这个关键字来取出价钱最便宜的name对应的信息。

我们上面说的nlargest()和nsmallest()函数是需要把我们代码中portfolio列表的元素一个个进行分析并排出大小,因此可以理解为nlargest()函数中是依次传入portfolio当中的一个元素进行分析并返回结果的。

那我们需要用到这个元素(这个元素类型是字典形式)中的‘price’值来进行判断,所以就需要把这个‘price’关键字对应的value返回给nlargest()作为排序的参考依据。
key=lambda s:s['price']
这行代码就起到了这个一个传递‘price’对应数字给nlargest()函数中的key的作用。

本来是需要定义一个函数(如下举例)
def example(dir):
return dir['dir']

key=example(portfolio[n])
把portfolio当中的元素一个个传到 example当中,并且把返回结果赋值给nlargest()中的key。
这其实是两步。并且这种情况下是需要重新定义一个函数(如例子中的example)来处理这个过程的,但是lambda 就可以省掉这个def example的过程,不用再给return dir['dir']这个过程专门“起一个函数名”了,可以直接通过lambda达到以上目的,这就是匿名函数。

lambda的用法:lambda [arg]: function

  1. 堆数据
    nums=[1,3,2,5,6,8,4,22,3,43,2,34]
    nums本来是列表数据,可以通过heapify()函数转换为堆数据,堆数据中总是会把最小的数据默认放在第一个元素也即[0]中。所以可以通过堆数据的pop()得到一组数据中的最小值。
    看代码:


    PTYHON-COOKBOOK学习记录-3_第4张图片
    image.png

你可能感兴趣的:(PTYHON-COOKBOOK学习记录-3)