python 基础知识点(蓝桥杯python科目个人复习计划14)

今日复习内容:竞赛常用标准库:heapq,functool,itertools

一.heapq

  • 堆:完全二叉树,每个节点小于等于子节点(默认为最小堆)
  • 每个节点k都有两个子节点 2k+1,2k+2
  • 如图:

从这个图中可以看出,每个节点的数字大小关系,这个是一定要注意的。 

  • 使用 list  表示一个堆
  • 1.将无序 list 转换成最小堆:heapq.heapify(a)
  • 2.最小堆a中添加元素x:heapq.heappush(a,x)
  • 3.弹出并返回最小元素:heapq.heappop(a)
  • 4.弹出并返回最小元素,同时添加元素x:heapq.heapreplace(a,x)
import heapq
a = [6,2,3,5,4,1]
heapq.heapify(a)
print('list = ',a)
del_item = heapq.heappop(a)
print('弹出元素:',del_item)
print('list1 = ',a)

运行结果:

运行结果:

 二.functool

  • functool 模块应用于高阶函数,即参数或(和)返回值为其他函数的函数
  • 此处只介绍偏函数:partial
  • partial:“冻结”某些函数的参数或者关键字参数,然后返回一个函数

functools.partial (func,*args,**keywords)

  • func:需要被扩展的函数,返回的函数其实是一个类似func的函数
  • *args:需要被固定的位置参数
  • **keywords:需要被固定的关键字参数
from functools import partial
def Add(a,b,c):
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
    print('a + b + c = ',a + b + c)
Add(1,2,3)
add_fix_c = partial(Add,c = 10)
add_fix_c(1,2)
add_fix_c = partial(Add,5)
add_fix_c(2,3)

运行结果:

这里有一个隐藏的知识点:位置参数必须在关键字参数前面 。 

from functools import partial
def add(*args,**kwargs):
    #打印位置参数
    for n in args:
        print(n)
    #打印关键字参数
    for k,v in kwargs.items():
        print('%s:%s'% (k,v))
#普通调用:
add(1,2,3,v1 = 10,v2 = 20)
print('-'*10)
# partial
add_partial = partial(add,10,k1 = 10,k2 = 20)
add_partial(1,2,3,k3 = 20)

运行结果:

三.itertools 

  • 创建迭代器的模块

      (1) 有限迭代器

      (2)无限迭代器

      (3)排列组合迭代器

  • itertool----无限迭代器

      (1) 生成长度为无限的迭代器

      (2)count(start = 0,step = 1):创建一个迭代器,它从start值开始,返回均匀 间隔的值。

      (3)cycle(iterable):创建一个迭代器,循环遍历iterable中所有元素。

      (4)repeat(object[,times]):创建一个迭代器,如果没有指定times则无限循环遍历object,否则指定times。

from itertools import count,cycle,repeat
for x in count(0,1):
    print(x)
    if x > 10:
        break

运行结果:

from itertools import count,cycle,repeat
for x in cycle([1,2,3]):
    print(x)

运行结果:

(结果是死循环) 

from itertools import count,cycle,repeat
for x in repeat(5):
    print(x)

运行结果:

(没有规定次数,结果是死循环)  

  • itertool---有限迭代器

 1.accumulate(iterable[,func]):创建一个迭代器,返回累积汇总值或其他双目运算函数的累积结果值;

from itertools import accumulate
a = [1,2,3,4]
print(a)
b = accumulate(a)
print(b)
for x in b:
    print(x)

运行结果:

 

accumulate的另一种用法,找出前几项(累积) 的最大值或最小值

from itertools import accumulate
a = [3,1,2,4]
print(a)
b = list(accumulate(a,min))
print(b)
c = list(accumulate(a,max))
print(c)

运行结果:

 

还有累乘的用法:

from itertools import accumulate
import operator
a = [3,1,2,4]
print(a)
b = list(accumulate(a,operator.mul))
print(b)

运行结果:

 

2.chain(*iterables) :合并多个迭代器

from itertools import chain
for x in chain('ABC','DEF'):
    print(x,end=' ')

运行结果:

 

3.product(*iterables,repeat = 1) :可迭代对象的笛卡尔积

  • iterables:表示多个可迭代对象
  • repeat:表示这些可迭代序列重复的次数

普通版本: 

ans = []
for i in [1,2,3]:
    for j in [4,5,6]:
        ans.append([i,j])
print(ans)

product版本:

from itertools import product
ans = list(product([1,2,3],[4,5,6]))
print(ans)

运行结果都一样,如下:

 

加上重复次数:

from itertools import product
ans = list(product([1,2,3],repeat = 2))
print(ans)

运行结果:

 

4.permutations(iterable,r = None) :由iterable元素生成长度为r的排列,如果r未指定或为None,r默认设置为iterable的长度

from itertools import permutations
a = list(permutations([1,2,3,4],r = 2))
for i in a:
    print(i)

运行结果:

 

5.combinations(iterable,r) :返回由输入iterable元素中元素组成长度为r的子序列

from itertools import combinations
a = list(combinations([1,2,3,4],r = 2))
for i in a:
    print(i)

运行结果:

 

OK,这次写到这里,不出意外的话,下一篇文章全是题,期末考考完继续! 

 

 

 

 

          

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值