python的一些库

刷leetcode碰到很多可以直接用python本身提供的一些库和结构,感觉有必要汇总一下,之前列过一次数据结构,太基础还是不够用。
https://blog.csdn.net/wwang_123/article/details/134994224
随时更新一下吧,常看常新。

https://docs.python.org/zh-cn/3.13/library/datatypes.html

collections

Counter

方便、快速的计数;

类似于字典,如果某个项缺失,会返回0,而不是报错;

from collections import *

#Counter
cnt = Counter()
wordList = ["a","b","c","c","a","a"]
for word in wordList:
    cnt[word] += 1
print(cnt)
# Counter({'a': 3, 'c': 2, 'b': 1})

c=Counter("gallery")
print(c)
# Counter({'l': 2, 'g': 1, 'a': 1, 'e': 1, 'r': 1, 'y': 1})

# 常用操作
# 统计所有的数目
print(sum(c.values()))
# 7

# 列出所有唯一的元素
print(list(c))

# 转换为set
print(set(c))
# ['g', 'a', 'l', 'e', 'r', 'y']

# 转换为常规的dict
print(dict(c))
# {'a', 'e', 'g', 'l', 'r', 'y'}

deque

栈和队列的一种广义实现,支持两端插入和删除元素

append(x)
appendleft(x)
count(x) # 返回deque中元素等于x的个数
extend(iterable)
extendleft(iterable)
pop()
popleft()
remover(value)# 移除第一次出现的value,如果没找到,报错
reverse() # 反转deque的元素,并返回None
rotate(n) # 从右侧反转n步,如果n为负数,则从左侧反转,d.rotate(1)等于d.appendleft(d.pop());
from collections import deque

d=deque("abc")
print(d)
# deque(['a', 'b', 'c'])

d.append('j')
d.appendleft('f')
print(d)
# deque(['f', 'a', 'b', 'c', 'j'])

d.pop()
d.popleft()
print(d)
# deque(['a', 'b', 'c'])

defaultdict

defaultdict是内置数据类型dict的一个子类,基本功能与dict一样,只是重写了一个方法__missing__(key)和增加了一个可写的对象变量default_factory

from collections import defaultdict

s = [('yellow',1),('blue',2),('yellow',3),('blue',4),('red',5)]
d = defaultdict(list)
for k,v in s:
    d[k].append(v)
print(d)
# defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [5]})

# 设置default_factory为int,使得defaultdict可以用于计数
s="testdefaultdefault"
d=defaultdict(int)
for k in s:
    d[k]+=1
print(d)
# defaultdict(<class 'int'>, {'t': 4, 'e': 3, 's': 1, 'd': 2, 'f': 2, 'a': 2, 'u': 2, 'l': 2})

# 将default_factory设置为set,使得defaultdict可以建立一个关于set的词典
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
d = defaultdict(set)
for k,v in s:
    d[k].add(v)
print(d)
# defaultdict(<class 'set'>, {'red': {1, 3}, 'blue': {2, 4}})

OrderedDict

类似于正常的词典,只是记住了元素插入的顺序,当在有序的词典上迭代时,返回的元素就是它们第一次添加的顺序。

from collections import OrderedDict
d = {"banana":3,"apple":2,"pear":1,"orange":4}
print(OrderedDict(sorted(d.items(),key=lambda t: t[0])))
# OrderedDict([('apple', 2), ('banana', 3), ('orange', 4), ('pear', 1)])

print(OrderedDict(sorted(d.items(),key=lambda t: t[1])))
# OrderedDict([('pear', 1), ('apple', 2), ('banana', 3), ('orange', 4)])

print(OrderedDict(sorted(d.items(),key = lambda t:len(t[0]))))
# OrderedDict([('pear', 1), ('apple', 2), ('banana', 3), ('orange', 4)])
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值