python中collections的用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python中collections的用法Python中collections模块是一个高效且便捷的工具,提供了多种数据类型的实现,用于解决一些常见的问题。
本文将介绍collections模块的几个主要数据类型及其用法,希望能为读者提供一些实用的工具和思路。
一、Counter(计数器)
Counter是collections模块中一个常用的数据类型,它可以用来统计可哈希对象(如列表、元组、字符串等)中各元素的出现次数。
下面是一个简单的例子:
```python
from collections import Counter
lst = ['apple', 'banana', 'apple', 'orange', 'orange', 'banana', 'apple']
counter = Counter(lst)
print(counter)
```
输出结果如下:
```
Counter({'apple': 3, 'banana': 2, 'orange': 2})
```
Counter对象本质上是一个字典,以元素作为键,出现次数作为值。
Counter对象的常用方法包括:
1. most_common(n):返回出现次数最多的n个元素,以及它们的出
现次数。
```python
print(counter.most_common(2))
```
输出结果如下:
```
[('apple', 3), ('banana', 2)]
```
2. elements():返回一个迭代器,按照计数重复每个元素。
```python
print(list(counter.elements()))
```
输出结果如下:
```
['apple', 'apple', 'apple', 'banana', 'banana', 'orange', 'orange']
```
二、deque(双端队列)
deque是一个双端队列,它可以快速地从两端进行增删操作,相比列表,在队列的两端插入和删除元素的时间复杂度都是O(1)。
下面是一个简单的例子:
```python
from collections import deque
d = deque()
d.append('a') # 从右端插入元素
d.appendleft('b') # 从左端插入元素
print(d)
d.pop() # 从右端删除元素
d.popleft() # 从左端删除元素
print(d)
```
输出结果如下:
```
deque(['b', 'a'])
deque(['a'])
```
deque对象的常用方法包括:
1. append(x):从右端插入元素x。
2. appendleft(x):从左端插入元素x。
3. pop():从右端删除并返回最右端的元素。
4. popleft():从左端删除并返回最左端的元素。
5. rotate(n):循环移动队列的元素n次,正数表示向右移动,负数
表示向左移动。
```python
d.rotate(1) # 向右移动1次
print(d)
```
输出结果如下:
```
deque(['a'])
```
三、defaultdict(默认字典)
defaultdict是一个字典的子类,它重写了字典的__missing__()方法,当字典的键不存在时,会返回一个默认值,而不是抛出KeyError异常。
下面是一个简单的例子:
```python
from collections import defaultdict
# 定义一个函数,作为默认值
def default_value():
return 'Unknown'
d = defaultdict(default_value)
d['name'] = 'Tom'
print(d['name']) # 输出'Tom'
print(d['age']) # 输出'Unknown'
```
defaultdict对象的默认值可以是一个常量,也可以是一个函数。
当使用函数作为默认值时,每次访问不存在的键时,都会调用该函数生成默认值。
四、namedtuple(命名元组)
namedtuple是一个类工厂函数,用于创建带有字段名的元组,可以像访问对象属性一样访问元组的字段。
下面是一个简单的例子:```python
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age'])
p = Person('Tom', 20)
print() # 输出'Tom'
print(p.age) # 输出20
```
namedtuple对象的字段可以通过名称或索引进行访问,具有元组的不可变性质。
五、OrderedDict(有序字典)
OrderedDict是一个有序字典,它会根据元素的插入顺序维护字典的顺序。
下面是一个简单的例子:
```python
from collections import OrderedDict
d = OrderedDict()
d['banana'] = 3
d['apple'] = 2
d['orange'] = 1
print(d)
```
输出结果如下:
```
OrderedDict([('banana', 3), ('apple', 2), ('orange', 1)])
```
OrderedDict对象的常用方法包括:
1. move_to_end(key, last=True):将键key移动到指定的位置last,默认为最后;若last为False,则将键移动到最前面。
2. popitem(last=True):删除并返回最后一个(last为True)或第一个(last为False)键值对。
```python
d.move_to_end('apple') # 将键'apple'移动到最后
print(d)
d.popitem(last=False) # 删除并返回第一个键值对
print(d)
```
输出结果如下:
```
OrderedDict([('banana', 3), ('orange', 1), ('apple', 2)])
OrderedDict([('orange', 1), ('apple', 2)])
```
六、总结
本文介绍了Python中collections模块的几个主要数据类型及其用法。
Counter能够统计可哈希对象的出现次数;deque可以快速进行双端插
入和删除操作;defaultdict提供了默认值的字典;namedtuple创建具有
字段名的元组;OrderedDict根据插入顺序维护字典的顺序。
这些数据
类型在实际编程中能够提供很大的便利,读者可以根据实际需求选择
合适的类型使用。