python collections库速查

Counter : 计数器

  • 用于计数,看作一个dict
  • 可以直接对列表统计每个元素出现次数
from collections import Counter
a = ["apple", "banana", "apple", "cat", "cat", "cat", "dog"]
b = Counter(a)
print("type(b) = ", type(b)) # type(b) = <class 'collections.Counter'>
print("b = ", b) # b = Counter({'cat': 3, 'apple': 2, 'banana': 1, 'dog': 1})

定义方式:

  • Counter(可迭代对象)
  • Counter(字典)
from collections import Counter
a = Counter() # 空Counter
a = Counter('Hello World') # 统计每个字符出现次数
a = Counter([1, 2, 3, 1, 2]) # 统计每个元素的出现次数

# 利用该字典初始化每个元素(key)和出现次数(value)
a = Counter({'a':1, 'b':2, 'c':3})
a = Counter(a=1, b=2, c=3)

常用函数

  • most_common(k):筛选出现频率最高的k个
  • elements():返回一个迭代器,每个元素重复对应次数
  • clear():清空
  • 大部分字典的功能均可使用
  • 数学运算
from collections import Counter
a = Counter("helloworld")
print("a = ", a) # a = Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})

print("Top 2: ", a.most_common(2)) # Top 2: [('l', 3), ('o', 2)]
print("list(a.elements()) = ", list(a.elements())) # list(a.elements()) = ['h', 'e', 'l', 'l', 'l', 'o', 'o', 'w', 'r', 'd']

c = Counter(a=3 ,b=1)
d = Counter(a=2, b=2)
print("c+d =", c+d) # c+d = Counter({'a': 5, 'b': 3})
print("c-d =", c-d) # c-d = Counter({'a': 1})
	```

## 双端队列
+ 大部分功能与list类似,但是删除和插入操作比list更高效
<center><table border="1"> <tr> <th>方法</th> <th>功能</th> </tr> <tr> <td>append(x)</td> <td>添加 x 到右端。</td> </tr> <tr> <td>appendleft(x)</td> <td>添加 x 到左端。</td> </tr> <tr> <td>pop()</td> <td>移去并且返回一个元素,deque 最右侧的那一个。</td> </tr> <tr> <td>popleft()</td> <td>移去并且返回一个元素,deque 最左侧的那一个。</td> </tr> <tr> <td>insert(i, x)</td> <td>在位置 i 插入 x 。</td> </tr> <tr> <td>extend(iterable)</td> <td>扩展 deque 的右侧,通过添加 iterable 参数中的元素。</td> </tr> <tr> <td>extendleft(iterable)</td> <td>扩展 deque 的左侧,通过添加 iterable 参数中的元素。<br>注意,左添加时,在结果中 iterable 参数中的顺序将被反过来添加。</td> </tr> <tr> <td>remove(value)</td> <td>移除找到的第一个 value。</td> </tr><tr> <td>rotate(n=1)</td> <td>向右循环移动n步。如果n是负数,就向左循环。</td> </tr> </table></center>

```python
from collections import deque

a = deque([1, 2, 3, 4])
a.append(5)
a.appendleft(0)
print("a = ", a) # a = deque([0, 1, 2, 3, 4, 5])

a.popleft()
print("a = ", a) # a = deque([1, 2, 3, 4, 5])
a.pop()
print("a = ", a) # a = deque([1, 2, 3, 4])
a.extend([2, 3, 4])
print(a) # deque([1, 2, 3, 4, 2, 3, 4])
a.remove(2)
print(a) # deque([1, 3, 4, 2, 3, 4])

a.rotate(1)
print(a) # deque([4, 1, 3, 4, 2, 3])

defaultdict:有默认值的字典

  • 在字典中获取一个key有两种方法,第一种get,第二种通过[]获取。
  • 使用dict时,如果引入的key不存在,就会抛出KeyiError。
  • 如果希望key不存在时,返回一个默认值,就可以用defaultdict。
from collections import defaultdict

d = defaultdict(int)
print(d['x']) # 0
d = defaultdict(list)
print(d['x']) # []
d = defaultdict(set)
print(d['x']) # set()
d = defaultdict(dict)
print(d['x']) # {}

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
	d[k].append(v)
print(d)

OrderedDict:有序字典

  • 与字典基本相同,key按照插入的顺序排序
  • popitem()函数:删除最后一个元素返回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值