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的常用类型有:

  • 计数器(Counter)
  • 默认字典(defaultdict)
  • 有序字典(OrderedDict)
  • 双向队列(deque)
  • 可命名元组(namedtuple)

下面我们来一一介绍。

1. 计数器-Counter

Counter 作为字典(dict)的一个子类用来进行哈希计数,将元素进行数量统计、计数后返回一个字典:键值为元素,值为元素个数

1.1 创建Counter

from collections import Counter

s = 'abcbcaccbbad'
l = ['a','b','c','c','a','b','b']
d = {'2': 3, '3': 2, '17': 2}
# Counter 获取各元素的个数,返回字典
print(Counter(s))   # Counter({'c': 4, 'b': 4, 'a': 3})
print(type(Counter(s))) #<class 'collections.Counter'>
print(Counter(l))   # Counter({'b': 3, 'a': 2, 'c': 2})
print(Counter(d))   # Counter({3: 3, 2: 2, 17: 1})

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
<class 'collections.Counter'>
Counter({'b': 3, 'a': 2, 'c': 2})
Counter({'2': 3, '3': 2, '17': 2})

1.2 次数排序-most_common

按照元素出现的次数由高到低进行排序,并返回一个list

from collections import Counter

s = 'abcbcaccbbad'
s_counter = Counter(s)

print(s_counter)
print(s_counter.most_common(3))

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
[('b', 4), ('c', 4), ('a', 3)]

1.3 返回经过排序的key-elements

elements 返回经过计数器Counter后的元素,返回的是一个迭代器

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)

for i in s_counter.elements(): #或者可以转化为list
    print(i)

输出:

a
a
a
b
b
b
b
c
c
c
c
d

1.4 加法更新-update

从一个集合中增加元素

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)
print(s_counter)
# 方法1:
s_counter.update('ef')
#方法2: 
# s_counter.update(Counter('ef'))
print(s_counter)

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1, 'e': 1, 'f': 1})

1.5 减法操作-substract

从一个集合中删除元素

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)
print(s_counter)
# 方法1:
s_counter.subtract('ae') #原始数据中没有e,所以它为-1
#方法2: 
# s_counter.subtract(Counter('ae'))
print(s_counter)

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
Counter({'b': 4, 'c': 4, 'a': 2, 'd': 1, 'e': -1})

1.6 迭代访问

items、keys和values与普通字典一样。

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)
print(s_counter)

for i in s_counter.items():
    print(i)

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
('a', 3)
('b', 4)
('c', 4)
('d', 1)

2. 双端队列-deque

deque可以从两端添加和删除元素,是collenctions中常用的模块,它的操作如下图所示:
在这里插入图片描述

from collections import deque

str1 = 'abc123cd'
dq = deque(str1)
print(dq)

print('==================元素访问操作================')
print(dq[2])

print('==================增加元素================')
dq.append('right') #右边
dq.appendleft('left')
dq.extend(['ext', 'end']) #右边添加多个
print(dq)

print('==================pop元素================')
dq.pop() #右边pop
dq.popleft() #左边pop
print('a' in dq)

print('==================in操作================')
print('a' in dq)

print('==================插入操作================')
dq.insert(3, "insert")
print(dq)

print('==================删除操作================')
dq.remove('c') #删除第一个元素'c
print(dq)

print('==================旋转操作================')
dq.rotate() #把右边的一个元素放到最左边
print(dq)

输出:

deque(['a', 'b', 'c', '1', '2', '3', 'c', 'd'])
==================元素访问操作================
c
==================增加元素================
deque(['left', 'a', 'b', 'c', '1', '2', '3', 'c', 'd', 'right', 'ext', 'end'])
==================pop元素================
True
==================in操作================
True
==================插入操作================
deque(['a', 'b', 'c', 'insert', '1', '2', '3', 'c', 'd', 'right', 'ext'])
==================删除操作================
deque(['a', 'b', 'insert', '1', '2', '3', 'c', 'd', 'right', 'ext'])
==================旋转操作================
deque(['ext', 'a', 'b', 'insert', '1', '2', '3', 'c', 'd', 'right'])

3. 默认字典-defaultdict

传统字典类型,如果没有默认类型,是无法直接赋值的,如下代码就会报错!

b = dict()
b['k'].append('2') #需要先创建该字典==》b['k'] = 3

默认字典,是字典的一个子类,继承有字典的方法和属性,默认字典在进行定义初始化的时候可以指定字典值得默认类型。

from collections import defaultdict

dic = defaultdict(list)
dic['k'].append('3')
dic['k'].append('4')
print(dic)

输出:

defaultdict(<class 'list'>, {'k': ['3', '4']})

4. 有序字典-OrderedDict

原始字典是无序的,而OrderDict 是一个有序字典,也是字典类型(dict)的一个子类,是对字典的一个补充。

from collections import OrderedDict

# 定义有序字典
dic2 = OrderedDict()
dic2['a'] = '1'
dic2['b'] = '2'
dic2['c'] = '3'
dic2['d'] = '4'
for k, v in dic2.items():
    print('有序字典:%s:%s' %(k,v))

输出:

有序字典:a:1
有序字典:b:2
有序字典:c:3
有序字典:d:4

5. 可命名元组-namedtuple

namedtuple是继承自tuple的子类,namedtuple会创建一个和tuple类似的对象,而且它拥有可访问的属性

  • 定义namedtuple类型

定义一个namedtuple类型User,并包含name,sex和age属性。

User = namedtuple('User', ['name', 'sex', 'age'])
  • 创建对象
# 方法一:
user = User(name='kongxx', sex='male', age=21)

#方法二:
user = User._make(['kongxx', 'male', 21])
  • 代码示例
from collections import namedtuple

# 定义一个namedtuple类型User,并包含name,sex和age属性。
User = namedtuple('User', ['name', 'sex', 'age'])

user = User(name='qlee', sex='male', age=21)

print(user)
print(user.name)
#修改对象属性
user = user._replace(age=30)

print(user)

# 将User对象转换为字典
user = user._asdict()
print(user)

输出:

User(name='qlee', sex='male', age=21)
qlee
User(name='qlee', sex='male', age=30)
{'name': 'qlee', 'sex': 'male', 'age': 30}
  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-07 22:39:25  更:2022-04-07 22:41:11 
 
开发: 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年11日历 -2024/11/15 18:29:39-

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