Python collections模块实例讲解

  • Post category:Python

关于“Python collections模块实例讲解”的攻略,我可以为你提供以下内容:

1. Python collections模块简介

Python标准库collections模块提供了一些特殊的容器类型,比如OrderedDict、defaultdict、ChainMap和Counter。其中,这些容器类型的目的是为了提供Python内置容器的替代品,并且通常比内置容器更好用。

1.1 OrderedDict

顾名思义,OrderedDict是一个有序字典。OrderedDict保留了字典元素插入时的顺序,因此在进行迭代时,元素的顺序是按照插入顺序排列。

示例代码:

from collections import OrderedDict

od = OrderedDict()
od['a'] = 10
od['b'] = 9
od['c'] = 8
od['d'] = 7

print("Before move:\n",od)

#move the word 'c' to the beginning of the dictionary
od.move_to_end('c', last = False)

print("After move:\n",od)

上述程序中,通过先创建一个空的OrderedDict,然后给字典添加元素,并使用move_to_end()函数将'c'移动到了字典的开头,从而体现了OrderedDict具有的有序性。

1.2 defaultdict

defaultdict是一个Python内置字典的子类,它允许用户在初始化时为字典指定一个默认值,当访问字典不存在的key时,默认值就会被调用。

示例代码:

from collections import defaultdict

# Initialize with int
d = defaultdict(int)

# Create a list of integers
arr = [1,2,1,3,4,5,5,3,1,2,5]

# Count frequency of each element in the list
for i in arr:
    d[i] += 1

# Print the defaultdict dictionary
print(d)

上述代码中,我们使用defaultdict初始化了一个int类型的字典。通过对一个列表进行遍历,我们统计了列表中每个元素的出现次数,并最终得到了一个带有默认值的字典。

2. Python collections模块的常用函数

collections模块提供了很多常用的函数,比如:Counter(), namedtuple(), deque()等函数。以下是其中部分函数的简要介绍:

2.1 Counter()

Counter()是一个计数器函数,它可以帮助你统计一个可迭代对象中每个元素出现的次数,并且返回一个字典对象。

示例代码:

from collections import Counter

fruit = ['apple', 'apple', 'banana', 'orange', 'pear', 'banana', 'orange', 'apple', 'orange', 'apple']

print(Counter(fruit))

上述代码中,我们使用Counter()函数统计了一个列表中每个元素出现的次数,并将结果以字典的形式输出。

2.2 namedtuple()

namedtuple()是一个工厂函数,可以用来创建命名元组。命名元组是在创建时给元组的元素添加了名称,并且可以通过名称进行访问。

示例代码:

from collections import namedtuple

# create a namedtuple called 'Person'
Person = namedtuple('Person', ['name', 'age', 'gender'])

# create an instance of Person
person = Person('Tom', 23, 'male')

# print the Person object
print(person)

上述代码中,我们使用namedtuple()函数创建了一个名为Person的命名元组,并添加了三个字段。将创建的Person对象输出后,可以看到Person对象是按照定义顺序输出的内容,即Person(name='Tom', age=23, gender='male')

2.3 deque()

deque()是一个双向队列函数,可以快速从队列两端添加或删除元素。

示例代码:

from collections import deque

# create an empty deque object
queue = deque()

# add elements to the deque
queue.append(1)
queue.append(2)
queue.append(3)

print("Queue before operation:\n", queue)

# remove elements from the deque
queue.pop()
queue.popleft()

print("Queue after operation:\n", queue)

上述代码中,我们使用deque()函数创建了一个双向队列。然后,使用append()函数将元素添加到队列末尾,使用pop()popleft()函数分别从队列末尾和队列开头删除元素。从输出结果中可以看到,双向队列deque具有从两端进行数组操作的优点。

希望以上内容能对你有所帮助。