📜  Python collection模块(1)

📅  最后修改于: 2023-12-03 14:45:56.741000             🧑  作者: Mango

Python collection模块

collections模块是Python标准库中的一个集合模块,提供了许多实用的数据结构,包括:namedtupledequeCounterdefaultdictOrderedDict 等等。这些数据结构可以帮助程序员完成许多有趣的任务,如计数、排序、去重等等。

namedtuple

namedtuple是一种特殊的元组,它可以为其元素命名。它是一个非常方便的工具,可以用于返回多个值并为这些值命名,而不用创建一个类。

它的语法是:

namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

其中:

  • typename是命名元组的名称
  • field_names是每个属性的名称,可以是一个空格分隔的字符串或一个可迭代对象
  • rename是一个可选的布尔参数。如果设为True,则会在发现非法标识符时将其替换为'_'
  • defaults是一个可选的元组,可以指定默认值
  • module是命名元组类的__module__属性
from collections import namedtuple

# 定义一个命名元组类型表示坐标
Point = namedtuple('Point', ['x', 'y'])
p1 = Point(1, 2)
print(p1) # output: Point(x=1, y=2)
print(p1.x) # output: 1
print(p1.y) # output: 2
deque

deque是双端队列,可以从队列的两端添加和删除元素,它比列表更快地完成这些操作,特别是当你需要使用一个很大的序列时,它的效率优势更加明显。

from collections import deque

# 创建一个空的deque
d = deque()

# 在右边添加元素
d.append(1)
d.append(2)
d.append(3)
print(d) # output: deque([1, 2, 3])

# 在左边添加元素
d.appendleft(0)
print(d) # output: deque([0, 1, 2, 3])

# 弹出右边的元素
d.pop()
print(d) # output: deque([0, 1, 2])

# 弹出左边的元素
d.popleft()
print(d) # output: deque([1, 2])
Counter

Counter实现了一个计数器功能,可以在一个可迭代对象中统计每个元素出现的次数,它返回一个字典,其中key是元素,value是出现的次数.

from collections import Counter

# 统计一个字符串中每个字符出现的次数
c = Counter('abcaba')
print(c) # output: Counter({'a': 3, 'b': 2, 'c': 1})

# 统计一个列表中每个元素出现的次数
lst = ['a', 'b', 'a', 'c', 'b']
c = Counter(lst)
print(c) # output: Counter({'a': 2, 'b': 2, 'c': 1})
defaultdict

defaultdict是一个字典,可以为字典中不存在的键提供默认值,避免因KeyError异常而中断程序的运行。

from collections import defaultdict

# 创建一个字典,其默认值为列表类型
d = defaultdict(list)

# 添加一些元素
d['a'].append(1)
d['b'].append(2)
d['a'].append(3)

print(d) # output: defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2]})
OrderedDict

OrderedDict是一个有序字典,它会记住插入键值对的顺序,所以你可以按插入的顺序遍历它。

from collections import OrderedDict

# 创建一个有序字典
od = OrderedDict()

# 添加一些元素
od['a'] = 1
od['c'] = 3
od['b'] = 2

print(od) # output: OrderedDict([('a', 1), ('c', 3), ('b', 2)])
参考链接