Python每日练习之常用数据结构(day~17)

heapq

堆是二叉树,其特点为:根节点值小于等于该节点子节点值

在这里插入图片描述

import heapq

# 创建两个列表[]
list1 = [34,25,66,77,22,55,74,98,91]
list2 = [
    {'name': 'Moon', 'shares': 100, 'APM': 391.1},
    {'name': 'SKY', 'shares': 50, 'APM': 243.22},
    {'name': 'LYN', 'shares': 200, 'APM': 221.09},
    {'name': 'Fov', 'shares': 35, 'APM': 231.75},
    {'name': 'TH000', 'shares': 45, 'APM': 216.35},
    {'name': 'ACME', 'shares': 75, 'APM': 215.65}
]
# heapq模块的nlargest()和nsmallest(),可以返回最大或最小的多个值
print(heapq.nlargest(3,list1))
print(heapq.nsmallest(3,list1))
print(heapq.nlargest(2,list2,key=lambda x:x['APM']))
print(heapq.nlargest(2,list2,key=lambda x:x['shares']))

"""
输出:
[98, 91, 77]
[22, 25, 34]
[{'name': 'Moon', 'shares': 100, 'APM': 391.1}, {'name': 'SKY', 'shares': 50, 'APM': 243.22}]
[{'name': 'LYN', 'shares': 200, 'APM': 221.09}, {'name': 'Moon', 'shares': 100, 'APM': 391.1}]
"""

itertools

itertools 是python的迭代器模块,itertools提供的生成迭代器的函数。

import itertools
# 产生1234的全排列
x = itertools.permutations('1234')
print(list(x))

# 产生56789的五选三组合
y = itertools.combinations('56789',3)
print(list(y))

# 产生ABC和abc的笛卡儿积
z = itertools.product('ABC','abc')
print(list(z))

# 累加 0+1+2+3……
d = itertools.accumulate(range(10))
print(list(d))
"""
输出
[('1', '2', '3', '4'), ('1', '2', '4', '3'), ('1', '3', '2', '4'), ('1', '3', '4', '2'), ('1', '4', '2', '3'), ('1', '4', '3', '2'), ('2', '1', '3', '4'), ('2', '1', '4', '3'), ('2', '3', '1', '4'), ('2', '3', '4', '1'), ('2', '4', '1', '3'), ('2', '4', '3', '1'), ('3', '1', '2', '4'), ('3', '1', '4', '2'), ('3', '2', '1', '4'), ('3', '2', '4', '1'), ('3', '4', '1', '2'), ('3', '4', '2', '1'), ('4', '1', '2', '3'), ('4', '1', '3', '2'), ('4', '2', '1', '3'), ('4', '2', '3', '1'), ('4', '3', '1', '2'), ('4', '3', '2', '1')]
[('5', '6', '7'), ('5', '6', '8'), ('5', '6', '9'), ('5', '7', '8'), ('5', '7', '9'), ('5', '8', '9'), ('6', '7', '8'), ('6', '7', '9'), ('6', '8', '9'), ('7', '8', '9')]
[('A', 'a'), ('A', 'b'), ('A', 'c'), ('B', 'a'), ('B', 'b'), ('B', 'c'), ('C', 'a'), ('C', 'b'), ('C', 'c')]
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
"""

collections

常用的工具类,日常高频使用模块,常用类型有:
计数器(Counter)
双向队列(deque):双端队列,是列表的替代实现。Python中的列表底层是基于数组来实现的,而deque底层是双向链表,因此在头尾添加和删除元素是,deque会表现出更好的性能
默认字典(defaultdict)
有序字典(OrderedDict)
可命名元组(namedtuple)

from collections import Counter

# 计数器(Counter): dict的子类,键是元素,值是元素的计数,它的most_common()方法可以帮助我们获取出现频率最高的元素
words = [
    'hi','baby','I','think','you','may','miss','me','do','I','right',
    'this','may','not','be','a','hard','question','do','you','think','so',
    'I','guess','you','are','right'
]
counter = Counter(words)
print(counter.most_common(3))
"""
输出
[('I', 3), ('you', 3), ('think', 2)]
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值