Python collections模块总结

Posted z18271397173

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python collections模块总结相关的知识,希望对你有一定的参考价值。

Counter

这是一个继承dict的子类,专门用来做计数器,dict中的方法这里同样适用

from collections import Counter其中数学运算如果其中一方的不存在,则会默认创建对应键,值为0的键值对

counter = Counter("accab")  # Counter({a: 2, c: 2, b: 1})
counter2 = Counter([1,2,3,4])  # Counter({1: 1, 2: 1, 3: 1, 4: 1})
counter5 = Counter([(a,3),(b, 2)])  # Counter({(a, 3): 1, (b, 2): 1})
# 字典
counter3 = Counter({a: 1, b: 2, a: 3})  # Counter({a: 3, b: 2})
counter4 = Counter(a=1, b=2, c=1)  # Counter({b: 2, a: 1, c: 1})
# elements
# 键值以无序的方式返回,并且只返回值大于等于1的键值对
elememts = counter.elements()
print([x for x in elememts])  # [a, a, c, c, b]
# 为空是因为elements是generator
print(sorted(elememts))  # []
# most_common
# 键值以无序的方式返回
print(counter.most_common(1))  # [(a, 2)]
print(counter.most_common())  # [(a, 2), (c, 2), (b, 1)]
# update
# 单纯是增加的功能,而不是像dict.update()中的替换一样
counter.update("abb")
print(counter)  # Counter({a: 3, b: 3, c: 2})
# subtract
counter.subtract(Counter("accc"))
print(counter)  # Counter({b: 3, a: 2, c: -1})
print([x for x in counter.elements()])  # [a, a, b, b, b]
# get
# 键不存在则返回0,但是不会加入到counter键值对中
print(counter[d])
print(counter)  # Counter({b: 3, a: 2, c: -1})
del counter[d]
# 还可以使用数学运算
c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
# add two counters together:  c[x] + d[x]
print(c + d)  # Counter({a: 4, b: 3})
# subtract (keeping only positive counts)
print(c - d)  # Counter({a: 2})
# # intersection:  min(c[x], d[x])
print(c & d) # Counter({a: 1, b: 1})
# union:  max(c[x], d[x])
print(c | d)  # Counter({a: 3, b: 2})
# 一元加法和减法
c = Counter(a=3, b=-1)
# 只取正数
print(+c)  # Counter({a: 3})
print(-c)  # Counter({b: 1})

deque

由于deque同样能够提供列表相关的函数,所以其和列表相同的函数则不再赘述,这里比较独特的是和left相关的函数以及rotate函数。

from collections import deque
# 从尾部进入,从头部弹出,保证长度为5
dq1 = deque(abcdefg, maxlen=5)
print(dq1)  # [c, d, e, f, g]
print(dq1.maxlen)  # 5
# 从左端入列
dq1.appendleft(q)
print(dq1)  # [q, c, d, e, f]
# 从左端入列
dq1.extendleft(abc)
print(dq1)  # [c, b, a, q, c]
# 从左端出列并且返回
dq1.popleft()  # c
print(dq1)  # [b, a, q, c]
# 将队头n个元素进行右旋
dq1.rotate(2)
print(dq1)  # [q, c, b, a]
# 将队尾两个元素进行左旋
dq1.rotate(-2)
print(dq1)  # [b, a, q, c]
def tail(filename, n=10):
    Return the last n lines of a file
    with open(filename) as f:
        return deque(f, n)
def delete_nth(d, n):
    """
    实现队列切片和删除,pop之后再放会原处
    :param d: deque
    :param n: int
    :return:
    """
    d.roatte(-n)
    d.popleft()
    d.rotate(n)

 

OrderedDict

OrderedDict提供了一个有序字典,可以使用在遍历的时候根据相应的顺序进行输出,因为在dict中它的item是以任意顺序进行输出的。

注意初始化的时候和在插入的话都根据插入顺序进行排序,而不是根据key进行排序。

from collections import OrderedDict
items = {c: 3, b: 2, a: 1}
regular_dict = dict(items)
ordered_dict = OrderedDict(items)
print(regular_dict)  # {c: 3, b: 2, a: 1}
print(ordered_dict)  # [(c, 3), (b, 2), (a, 1)]
# 按照插入顺序进行排序而不是
ordered_dict[f] = 4
ordered_dict[e] = 5
print(ordered_dict)  # [(c, 3), (b, 2), (a, 1), (f, 4), (e, 5)]
# 把最近加入的删除
print(ordered_dict.popitem(last=True))  # (e, 5)
# 按照加入的顺序删除
print(ordered_dict.popitem(last=False))  # (c, 3)
print(ordered_dict)  # [(b, 2), (a, 1), (f, 4)]
# 移动到末尾
ordered_dict.move_to_end(b, last=True)
print(ordered_dict)  # [(a, 1), (f, 4), (b, 2)]
# 移动到开头
ordered_dict.move_to_end(b, last=False)
print(ordered_dict)  # [(b, 2), (a, 1), (f, 4)]
ordered_dict[a] = 3
# 说明更改值并不会影响加入顺序
print(ordered_dict.popitem(last=True))  # (f, 4)

 

提供了字典的功能,又保证了顺序。

 

namedtuple

如果我们想要在tuple中使用名字的参数,而不是位置,namedtuple提供这么一个创建名称tuple的机会。

from collections import namedtuple
Point = namedtuple(Point, [x, y])
p = Point(10, y=20)
print(p)  # Point(x=10, y=20)
print(p.x + p.y)  # 30

以上是关于Python collections模块总结的主要内容,如果未能解决你的问题,请参考以下文章

Python collections模块总结

Python collections模块总结

python中collections常用模块总结

python第八天学习总结

python基础总结

Python中collections模块中的Counter()类