collections
collections模块是Python内置的一个集合(容器)类库,提供了一些特定的容器类,用于存储和管理数据,比内置的容器类更加强大和灵活。以下是该模块中一些常用的容器类及其示例:
以下是常用的collections模块中的方法:
- namedtuple
定义一个具名元组类。元组是不可变的,但由于具名元组的属性,可以像对象一样引用元素。
示例:
from collections import namedtuple
# 定义一个具名元组类
Person = namedtuple('Person', ['name', 'age', 'gender'])
# 创建一个具名元组对象并访问它的属性
person1 = Person(name='Alice', age=25, gender='Female')
print(person1.name) # output: Alice
- deque
实现了双端队列,支持从两端添加或删除元素。比列表的效率更高。
示例:
from collections import deque
# 创建一个双端队列
d = deque([1, 2, 3])
# 在左边添加元素
d.appendleft(0)
# 在右边添加元素
d.append(4)
print(d) # output: deque([0, 1, 2, 3, 4])
- Counter
计数器,用于统计元素出现的次数。
示例:
from collections import Counter
# 创建一个计数器
c = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
# 统计元素出现的次数
print(c) # output: Counter({'apple': 3, 'banana': 2, 'orange': 1})
# 获取最常见的3个元素及其出现次数
print(c.most_common(3)) # output: [('apple', 3), ('banana', 2), ('orange', 1)]
- defaultdict
字典的子类,当访问一个不存在的键时,返回一个默认值。
示例:
from collections import defaultdict
# 创建一个默认字典,返回值为0
d = defaultdict(int)
# 访问一个不存在的键,返回默认值0
print(d['key']) # output: 0
- OrderedDict
有序字典,记录元素的添加顺序。
示例:
from collections import OrderedDict
# 创建一个有序字典
d = OrderedDict()
# 添加元素
d['a'] = 1
d['b'] = 2
d['c'] = 3
# 遍历字典,输出顺序为添加顺序
for k, v in d.items():
print(k, v)
# output:
# a 1
# b 2
# c 3
- ChainMap
将多个字典或映射组合为一个映射。
示例:
from collections import ChainMap
# 创建两个字典
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
# 将两个字典组合为一个映射
chained_dict = ChainMap(d1, d2)
# 访问元素
print(chained_dict['a']) # output: 1
print(chained_dict['b']) # output: 2,因为d1中的'b'优先级更高
print(chained_dict['c']) # output: 4
- UserDict
一个字典的包装类,可以更方便地创建子类。
示例:
from collections import UserDict
# 创建一个字典的包装类
class MyDict(UserDict):
def square(self):
for k, v in self.data.items():
self.data[k] = v ** 2
# 创建一个实例
d = MyDict({'a': 2, 'b': 3, 'c': 4})
# 调用自定义方法
d.square()
# 输出字典
print(d) # output: {'a': 4, 'b': 9, 'c': 16}
- UserList
一个列表的包装类,可以更方便地创建子类。
示例:
from collections import UserList
# 创建一个列表的包装类
class MyList(UserList):
def remove_and_square(self, item):
self.data.remove(item)
self.data = [x ** 2 for x in self.data]
# 创建一个实例
l = MyList([2, 3, 4, 5])
# 调用自定义方法
l.remove_and_square(4)
# 输出列表
print(l) # output: [4, 9, 25]