当前位置: 首页 > news >正文

让网站打开更快/2023新闻热点摘抄

让网站打开更快,2023新闻热点摘抄,个人交互网站,wordpress固定连接怎么设置好Python的collections模块:数据结构的百宝箱 对话实录 小白:处理数据时,Python自带的数据结构不够用,有更强大的工具吗? 专家:那可不能错过collections模块,它提供了许多高效实用的数据结构&am…

Python的collections模块:数据结构的百宝箱

图片

对话实录

小白:处理数据时,Python自带的数据结构不够用,有更强大的工具吗?

专家:那可不能错过collections模块,它提供了许多高效实用的数据结构,能大幅提升数据处理的效率与灵活性。

collections功能介绍

1. Counter:统计元素出现次数

Counter用于统计可迭代对象中元素出现的频次。比如统计文本中单词出现次数:

from collections import Counter
text = "apple banana apple cherry banana apple"
word_list = text.split()
#统计次数
word_counter = Counter(word_list)
print(word_counter)
#输出为:
Counter({'apple': 3, 'banana': 2, 'cherry': 1})text2 = "apple banana apple cherry banana apple"
word_list2 = text2.split()
#使用update函数添加另一个可迭代对象,继续统计次数
word_counter.update(word_list2)
print(word_counter)
#输出为
Counter({'apple': 6, 'banana': 4, 'cherry': 2})

2. defaultdict:带有默认值的字典

普通字典访问不存在的键会报错,defaultdict则会自动创建默认值。例如按类别统计物品数量:

from collections import defaultdict
category_items = defaultdict(int)
items = [('fruit', 'apple'), ('fruit', 'banana'), ('vegetable', 'carrot'), ('fruit', 'cherry')]
for category, item in items:category_items[category] += 1
print(category_items)
#输出为:
defaultdict(<class 'int'>, {'fruit': 3, 'vegetable': 1})

defaultdict(int)表示默认值为 0,最终输出defaultdict(<class 'int'>, {'fruit': 3,'vegetable': 1}),适用于需预先初始化值的字典场景。

3. OrderedDict:有序字典

普通字典在 Python 3.6 前无序,3.7 后虽保持插入顺序,但OrderedDict能更明确表示有序性,还有操作顺序的方法。如记录用户操作步骤:

from collections import OrderedDict
user_actions = OrderedDict()
user_actions['step1'] = 'login'
user_actions['step2'] = 'browse products'
user_actions['step3'] = 'add to cart'
user_actions['step4'] = 'checkout'
for step, action in user_actions.items():print(f"{step}: {action}")

输出严格按插入顺序展示,适用于历史记录、任务流程管理等需保持元素顺序的场景。

另外大家都知道集合有去重的功能,但是集合是无序的,去重后会导致原来的对象变得无序。此时可以通过OrderedDict保持原来的顺序。举例如下:

listA = ['orange', 'apple', 'pear', 'banana','orange']
listB = set(listA)
print(listB)
#打印结果 集合去重后元组顺序改变了
{'banana', 'pear', 'orange', 'apple'}

我们通过有序字典
collections.OrderedDict.fromkeys()功能,对列表去重并保持有序

from collections import OrderedDict
listC = list(OrderedDict.fromkeys(listA))
print(listC)
['orange', 'apple', 'pear', 'banana']

4.deque:双端队列

deque允许在队列两端高效添加和删除操作。模拟任务队列,可在队首添加紧急任务,队尾添加普通任务:

from collections import deque
task_queue = deque()task_queue.append('task1')
task_queue.append('task2')
task_queue.appendleft('urgent_task')while task_queue:task = task_queue.popleft()print(f"Processing task: {task}")

appendleft在队首添加,popleft从队首取出,在广度优先搜索、缓存管理等需双向操作的队列场景中性能更优。

5.namedtuple:具名元组

namedtuple为元组元素命名,让代码更易读。如表示学生信息:

from collections import namedtuple
Student = namedtuple('Student', ['name', 'age', 'grade'])student1 = Student('Alice', 20, 'A')
print(student1.name)
print(student1.age)
print(student1.grade)

通过属性名访问元素,数据存储和传递时很方便,适用于数据结构固定、元素含义明确的场景。

6.ChainMap:合并多个映射

ChainMap可组合多个字典或映射,形成单一视图,在处理多个配置文件等场景中有用。如合并默认和用户自定义配置字典:

from collections import ChainMap
default_config = {'color': 'blue', 'font':'sans-serif'}
user_config = {'color':'red'}combined_config = ChainMap(user_config, default_config)
print(combined_config['color'])
print(combined_config['font'])
#输出为:
red
sans-serif

访问键时先在user_config查找,不存在再在default_config查找,输出red和sans-serif 。

7.UserDict:自定义字典类

UserDict是创建自定义字典类的基类。创建不允许删除键的字典类:

from collections import UserDict
class NoDeleteDict(UserDict):def __delitem__(self, key):raise NotImplementedError("删除操作不被允许")ndd = NoDeleteDict({'key1': 'value1', 'key2': 'value2'})# 尝试删除键会引发错误
del ndd['key1']

继承UserDict并覆盖方法,可定制符合需求的字典类。

8.UserList:自定义列表类

类似UserDict,UserList用于创建自定义列表类。创建只能存储整数的列表类:

from collections import UserList
class IntList(UserList):def append(self, item):if not isinstance(item, int):raise ValueError("只能添加整数")super().append(item)
il = IntList()
il.append(1)
# 尝试添加非整数会引发错误
# il.append('not an integer')  

可对列表操作进行约束和扩展,满足特定业务逻辑。

小白:哇,collections模块这么强大!

专家:熟练掌握它,你在Python数据处理上会更得心应手,快去实践吧!

常用函数及数据结构速查表

函数 / 数据结构

用法

说明

Counter

Counter(iterable)

统计可迭代对象中元素出现次数

defaultdict

defaultdict(default_factory)

带有默认值的字典,default_factory为可调用对象

OrderedDict

OrderedDict()

有序字典,保持元素插入顺序

deque

deque([iterable], maxlen=None)

双端队列,可设置最大长度maxlen

namedtuple

namedtuple('typename', 'field_names')

具名元组,typename为类型名,field_names为字段名

ChainMap

ChainMap(*maps)

合并多个映射

UserDict

class MyDict(UserDict)

用于创建自定义字典类的基类

UserList

class MyList(UserList)

用于创建自定义列表类的基类

图片

http://www.whsansanxincailiao.cn/news/31971594.html

相关文章:

  • wordpress做了个站没流量/抖音seo排名
  • 网站网页设计怎么收费/网站外链分析工具
  • 快速搭建网站系统/seo网站地图
  • 优化稳定网站排名/免费下优化大师
  • 男装商城网站建设/金泉网做网站多少钱
  • 做网站可以用python么/5118关键词工具
  • 河南企业建站系统信息/百度sem竞价推广电子书
  • 网站不被百度收录/seo建站要求
  • 网站为什么做优化ppt/举一个病毒营销的例子
  • 浙江网站建设情况分析/如何建网站详细步骤
  • 微软网站做u盘启动教程/seo网站优化助理
  • 网页设计与网站建设的概述/投诉百度最有效的电话
  • 1千万人网站维护成本/以图搜图百度识图网页版
  • 360网站seo如何做/seo自学教程推荐
  • WordPress分段插件/seo站内优化教程
  • 手机微网站二级菜单怎么做/沈阳网站建设制作公司
  • 网站建设平台推荐/google网站
  • 优秀移动端网站/进一步优化营商环境
  • 网站建设公司创业/怎么在百度上发广告
  • java开发常用四大框架/上海谷歌seo
  • 衡阳企业网站建设价格/口碑营销的步骤
  • 做减肥网站/长沙seo外包服务
  • 用php做购物网站案例/收录查询api
  • 网站建设定制网站建设公司哪家好/西安百度公司官网
  • 触屏网站开发/外链管理
  • 手机怎么做自己的网站/百度竞价排名背后的伦理问题
  • 哪里可以在百度做网站/互联网推广广告
  • 我做网站价格/百度信息流广告代理
  • 玄武网站制作收费报价/最新社会舆情信息
  • 网站欢迎页面flash/站长工具高清