旅游网站的主要功能,网站不备案怎么做网页淘宝客,中国移动有免费的视频app,建设工程资质录入是在那个网站前言
这几天刷leetcode题时#xff0c;看到题解中有这样一行代码collections.defaultdict(list)#xff0c;不明白是啥意思#xff0c;平时开发的脚本中未遇到#xff0c;借着这个机会#xff0c;学习一下collections模块的用法。
collections
这个模块实现了一些专门化…前言
这几天刷leetcode题时看到题解中有这样一行代码collections.defaultdict(list)不明白是啥意思平时开发的脚本中未遇到借着这个机会学习一下collections模块的用法。
collections
这个模块实现了一些专门化的容器提供了对 Python 的通用内建容器 dict、list、set 和 tuple 的补充。
defaultdict
defaultdict是dict字典的一个子类它为字典操作中的缺失键提供了默认值。这在处理计数、分组等操作时非常有用。
案例给定一个列表将每个单词按首字母分组
import collections
mp collections.defaultdict(list)
words [apple, banana, orange, pear, peach]
for word in words:mp[word[0]].append(word)
print(mp) # defaultdict(class list, {a: [apple], b: [banana], o: [orange], p: [pear, peach]})
mp collections.defaultdict(list)这行代码创建了一个defaultdict对象其中list是指定的默认值类型。
这意味着当我们通过mp访问一个不存在的键时defaultdict会自动创建这个键并将其对应的值初始化为一个空列表。比如上面这段代码我们在print(mp)前面增加mp[aa]此时会输出defaultdict(class list, {a: [apple], b: [banana], o: [orange], p: [pear, peach], aa: []})
Counter
Counter是一个简单而强大的计数器工具用于统计可迭代对象中各元素出现的次数。
案例统计一个字符串中字符出现的次数
import collections
s abracadabra
counter collections.Counter(s)
print(counter) # 输出结果Counter({a: 5, b: 2, r: 2, c: 1, d: 1})
namedtuple
namedtuple创建了一个带字段名的元组类型它可以对元组进行命名使得代码更易读。
案例创建一个表示坐标的数据结构
import collections
Point collections.namedtuple(Point, [x, y])
p Point(11, y22)
print(p.x, p.y) # 输出结果11 22
deque
deque是一个双向队列可以在两端快速插入和删除元素适用于需要高效地进行队列和栈操作的场景。
案例使用deque实现一个简单的循环队列
import collections
q collections.deque(maxlen3)
q.append(1)
q.append(2)
q.append(3)
print(q) # 输出结果deque([1, 2, 3], maxlen3)
q.append(4)
print(q) # 输出结果deque([2, 3, 4], maxlen3)
OrderedDict
有序字典保持元素被插入的顺序。
案例实现LRU缓存LRULeast Recently Used缓存是一种常见的缓存策略当缓存满时会淘汰最近最少使用的元素。OrderedDict可以很方便地实现LRU缓存每次访问一个元素时将其移到字典的末尾这样最近访问的元素就会被保留最早访问的元素就会被淘汰。
from collections import OrderedDict
class LRUCache:def __init__(self, capacity):self.capacity capacityself.cache OrderedDict()
def get(self, key):if key in self.cache:value self.cache[key]# 将访问的元素移到字典的末尾self.cache.move_to_end(key)return valueelse:return -1
def put(self, key, value):if key in self.cache:# 如果key已经存在将其移到字典的末尾self.cache.move_to_end(key)self.cache[key] valueif len(self.cache) self.capacity:# 如果缓存已满淘汰最早访问的元素self.cache.popitem(lastFalse)
ChainMap
在多个字典中查找某个键的值可以使用ChainMap将这些字典组合成一个逻辑上的字典从而方便地进行查找操作。
案例使用ChainMap查找键的值
from collections import ChainMap
dict1 {a: 1, b: 2}
dict2 {c: 3, d: 4}
dict3 {e: 5, f: 6}
chain_map ChainMap(dict1, dict2, dict3)
value chain_map[a]
print(value) # 输出: 1
value chain_map[c]
print(value) # 输出: 3
UserDict
当需要创建一个自定义的字典类时可以继承UserDict类从而方便地实现自定义的字典功能。
案例使用UserDict创建自定义字典类
from collections import UserDict
class MyDict(UserDict):def __setitem__(self, key, value):super().__setitem__(key, value * 2)
my_dict MyDict()
my_dict[a] 1
my_dict[b] 2
print(my_dict) # 输出: {a: 2, b: 4}
UserList
当需要创建一个自定义的列表类时可以继承UserList类从而方便地实现自定义的列表功能。
案例使用UserList创建自定义列表类
from collections import UserList
class MyList(UserList):def remove_duplicates(self):self.data list(set(self.data))
my_list MyList([1, 2, 2, 3, 4, 4, 5])
my_list.remove_duplicates()
print(my_list) # 输出: [1, 2, 3, 4, 5]
UserString
当需要创建一个自定义的字符串类时可以继承UserString类从而方便地实现自定义的字符串功能。
案例使用UserString创建自定义字符串类
from collections import UserString
class MyString(UserString):def remove_whitespace(self):self.data self.data.replace( , )
my_string MyString(Hello World)
my_string.remove_whitespace()
print(my_string) # 输出: HelloWorld
最后
这篇文章主要介绍了collections模块中几个常用数据结构的简单介绍和示例。使用这些数据结构能够让我们更加高效地处理各种实际问题提高代码的可读性和可维护性。
如果你对Python感兴趣想要学习python这里给大家分享一份Python全套学习资料都是我自己学习时整理的希望可以帮到你一起加油
有需要的小伙伴可以V扫描下方二维码免费领取
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频有了这些视频轻轻松松上手Python~
③练习题
每节视频课后都有对应的练习题哦可以检验学习成果哈哈
2️⃣国内外Python书籍、文档
① 文档和书籍资料 3️⃣Python工具包项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了每个都有详细的安装教程保证你可以安装成功哦
②Python实战案例
光学理论是没用的要学会跟着一起敲代码动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。100实战案例源码等你来拿
③Python小游戏源码
如果觉得上面的实战案例有点枯燥可以试试自己用Python编写小游戏让你的学习过程中增添一点趣味
4️⃣Python面试题
我们学会了Python之后有了技能就可以出去找工作啦下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂并且有阿里大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。
上述所有资料 ⚡️ 朋友们如果有需要的可以扫描下方二维码免费领取