Python collecitons学习

Python collecitons学习

1
import collections

Counter

可以接受list 或者 tuple 的迭代器,返回一个 counter dictionary,这个词典的key是迭代器中unique的元素,value是该key在迭代器中的计数

1
2
3
4
5
6
lst = [1,1,1,2,2,3,4,4,4,4,5,5,5,9]
counter = collections.Counter(lst)
print(counter)


输出:Counter({4: 4, 1: 3, 5: 3, 2: 2, 3: 1, 9: 1})
1
2
3
4
print(counter[1])


输出:3

most_common()函数

当它应用于一个 Counter 对象时,会返回一个 list,这个 list 包含了前 N 个常见的元素及其计数,它们按照常见度降序排列。

1
2
3
4
print(counter.most_common(3))


输出:[(4, 4), (1, 3), (5, 3)]

sum()函数

返回计算计数的总和

1
print(sum(counter))

24

deque

deque本质上queue,遵循FIFO原则。但是在 python collection中的deque实现了更多的操作。

创建一个最大长度为10的deque,并用0-9的数字初始化

1
2
3
4
my_queue = collections.deque(maxlen = 10)
for i in range(10):
my_queue.append(i)
print(my_queue)

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

我们继续往deque的后面添加数字,可以看到最前面的数字被挤出去了。

1
2
3
for i in range(10,15):
my_queue.append(i)
print(my_queue)
deque([5, 6, 7, 8, 9, 10, 11, 12, 13, 14], maxlen=10)

同样我们可以用从左边,也就是队头添加元素

1
2
my_queue.appendleft(100)
print(my_queue)
deque([100, 5, 6, 7, 8, 9, 10, 11, 12, 13], maxlen=10)

返回某个元素的计数

1
print(my_queue.count(10))
1

extend()函数接收list等来扩展deque,extendleft 同理

1
2
3
lst = [13,14,15]
my_queue.extend(lst)
print(my_queue)
deque([7, 8, 9, 10, 11, 12, 13, 13, 14, 15], maxlen=10)

insert(i,x) 将x插入到i位置

如果插入后超过最大长度,则会raise IndexError

1
2
my_queue.insert(8,15)
print(my_queue)

---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

<ipython-input-21-507412ea7411> in <module>
----> 1 my_queue.insert(8,16)
      2 print(my_queue)


IndexError: deque already at its maximum size

pop() 删除并返回队尾的元素

1
2
3
my_queue.pop()
print(my_queue)
# popleft 同理
deque([7, 8, 9, 10, 11, 12, 13, 13, 14], maxlen=10)

这时候我们再来尝试insert

1
2
my_queue.insert(8,15)
print(my_queue)
deque([7, 8, 9, 10, 11, 12, 13, 13, 15, 14], maxlen=10)

remove() 删除第一个找到的元素

1
2
my_queue.remove(13)
print(my_queue)
deque([7, 8, 9, 10, 11, 12, 13, 15, 14], maxlen=10)

reverse() 翻转队列

1
2
my_queue.reverse()
print(my_queue)
deque([14, 15, 13, 12, 11, 10, 9, 8, 7], maxlen=10)

namedtuple

namedtuple() 可以返回一个 tuple,该 tuple 中的每个位置都有固定名称,而且 namedtuple 对象也有通用名称。要使用 namedtuple,需要先为其创建一个模板。下面的代码创建了一个名为「person」的 namedtuple 模板,其属性为「name」、「age」和「job」。

1
2
3
4
person = collections.namedtuple('Person','name age job')
WANG = person(name='wang',age=23,job='manager')
ZHAO = person('zhao',23,'teacher')
print(WANG,ZHAO)
Person(name='wang', age=23, job='manager') Person(name='zhao', age=23, job='teacher')
0%