IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python-collections -> 正文阅读

[Python知识库]python-collections

collections提供了一些容器类,用来替代list,set,tuple,dict的标准容器

类名用途
namedtuple创建命名元祖子类的工厂函数
deque类似列表,实现了从两端快速添加和弹出
ChainMap类似字典,将多个映射集合到一个视图里
Counter类似字典,提供了可哈希对象的计数功能
OrderedDict字典的子类,保存了被添加的顺序
defaultdict字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
UserDict封装了字典对象,简化了字典子类化
UserList封装了列表对象,简化了列表子类化
UserString封装了字符串对象,简化了字符串子类化

deque

deque是一个双向队列,创建队列时,如果指定maxlen,则创建固定长度的队列,当有新纪录加入队列而队列已满时会自动移除最老的那条记录
可以从两端添加和弹出元素
append(x)------添加到右端
appendleft(x)------添加到左端
pop()----移除最右侧的元素
popleft()-----移除最左侧的元素

from collections import deque
#创建一个长度固定的双向队列
de=deque(maxlen=3)
de.append(2)
de.append(3)
de.append(4)
print(list(de))
#队列已满,再次添加,会将2移除队列
de.append(5)
print(list(de))
print(de[2])

运行结果:

[2, 3, 4]
[3, 4, 5]
5
deque应用场景,保存最后N个元素
import re
from collections import deque
"""
对一系列的文本做简单的匹配操作,如果匹配则返回匹配的行以及检查过的前N行
分析:首先肯定要使用一个变量记录匹配的行,一个列表记录检查过的前N行(使用deque可以很方便的记录前N行)
一个文件中如果有多个匹配的行,如何记录这些匹配的行以及每一个匹配行的前N行,使用列表,元素是元组
"""

def search_deque(flines,pattern,history=5):
    result=list()
    previoue_lines=deque(maxlen=history)
    for line in flines:
        previoue_lines.append(line)
        if re.search(pattern,line):
        #注意:这里要使用list将deque转化为list,否则,这里将添加的是deque对象,后续后的值也会改变
            result.append((line,list(previoue_lines)))

    return result

with open("test","r") as f:
    for line,pline in search_deque(f,"python"):
        for item in pline:
            print(item,end=",")
        print(line)
        print("-"*20)

使用生成器将代码优化

def serch_deque_gen(flines,pattern,history=5):
    previous_line=deque(maxlen=history)
    for line in flines:
        if re.search(pattern,line):
            yield line,previous_line
        previous_line.append(line)

with open("test","r") as f:
    for line,pline in serch_deque_gen(f,"python"):
        for item in pline:
            print(item,end=",")
        print(line)
        print("-"*20)

defaultdict

defaultdict(default_factory=None)

default_factory: 如果创建对象时传入default_factory,那字典会被初始化为default_factory

from collections import defaultdict

dic1=defaultdict()
dic2=defaultdict(list)
dic3=defaultdict(int)

print(dic1)
print(dic2)
print(dic3)

使用list作为default_factory,可以创建一个键-列表组成的字典
使用defaultdict的好处是:会自动初始化第一个值,这样后续可以直接使用+,append等方法

dic4=dict()
#因为列表没有被初始化,就直接使用append会报错
dic4["one"].append(4)

运行结果:

KeyError: 'one'

可以使用setdefault设置一个初始值

dic4=dict()
dic4.setdefault('one',[])
dic4["one"].append(4)
print(dic4)
from collections import defaultdict

dic1=defaultdict(int)
dic1["one"]+=1
print(dic1)

OrderDict

创建有序字典

Counter

提供快速和方便计数,用于计数可哈希对象
class collections.Counter([iterable-or-mapping])

from collections import Counter

c=Counter("werrieuuuueeewssdee")
print(c)

运行结果:

Counter({'e': 7, 'u': 4, 'w': 2, 'r': 2, 's': 2, 'i': 1, 'd': 1})

c1=Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(c1)

运行结果:

Counter({'blue': 3, 'red': 2, 'green': 1})

使用dict将Counter转化为普通字典

c1=Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(dict(c1))

运行结果:

{'red': 2, 'blue': 3, 'green': 1}

most_common

返回一个列表,出现次数最多的前n个元素

words=["look","into","my","eyes","look","iinto","my","eyes","the","eyes","the","eyes","not","around","under","into"]

word_counts=Counter(words)
lst=word_counts.most_common(3)
print(lst)

运行结果:

[('eyes', 4), ('look', 2), ('into', 2)]
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:06:21  更:2022-04-29 12:07:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 8:23:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计