python中collections常用模块总结

python中collections常用模块总结,第1张

文章目录
  • 1. 计数器-Counter
    • 1.1 创建Counter
    • 1.2 次数排序-most_common
    • 1.3 返回经过排序的key-elements
    • 1.4 加法更新-update
    • 1.5 减法 *** 作-substract
    • 1.6 迭代访问
  • 2. 双端队列-deque
  • 3. 默认字典-defaultdict
  • 4. 有序字典-OrderedDict
  • 5. 可命名元组-namedtuple

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))) #
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}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存