python内置模块collections介绍

Python内置模块collections介绍

Python内置的collections模块提供了一些实用的集合类,它们是dict、defaultdict、OrderedDict、Counter和deque。在Python的标准库中,collections是一个高效、可扩展的容器数据类型,它们提供了Python内建容器类型的替代选择,是处理数据的重要工具之一。

1. dict

Python中的dict是一种非常重要的数据类型,它是一种键-值存储结构,也相当于一个哈希表。在Python中使用dict可以实现常见的映射关系,例如统计每个单词出现的次数。下面是一个示例:

# 统计每个单词出现的次数

s = "hello world from python"

word_count = {}

for word in s.split():

if word not in word_count:

word_count[word] = 1

else:

word_count[word] += 1

print(word_count)

输出结果为:

{'hello': 1, 'world': 1, 'from': 1, 'python': 1}

但是,如果我们想要默认每个单词都出现一次,我们可以使用collections模块中的defaultdict来代替dict。

2. defaultdict

defaultdict的作用和dict大致相同,但是,当一个不存在的键被访问时,defaultdict可以自动创建一个默认值(可以是int、list、set等)作为这个键的值。下面是一个示例:

# 使用defaultdict统计每个单词出现的次数

from collections import defaultdict

s = "hello world from python"

word_count = defaultdict(int)

for word in s.split():

word_count[word] += 1

print(word_count)

输出结果为:

defaultdict(, {'hello': 1, 'world': 1, 'from': 1, 'python': 1})

可以看到,使用defaultdict可以省去判断键是否存在的步骤。

3. OrderedDict

Python 3.7之后,字典(dict)也是有序的了。但在Python 3.7之前,如果我们需要有序的字典,可以使用collections模块中的OrderedDict。

OrderedDict是一个有序的字典,按照插入的顺序进行排序。下面是一个示例:

# 使用OrderedDict按照插入顺序排序

from collections import OrderedDict

d = OrderedDict()

d['a'] = 1

d['b'] = 2

d['c'] = 3

print(d)

输出结果为:

OrderedDict([('a', 1), ('b', 2), ('c', 3)])

在以上示例中,添加元素的顺序为a、b、c,所以输出结果中元素的顺序也是a、b、c。

4. Counter

Counter是一个简单的计数器。它可以统计一个序列中元素出现的次数,并以字典的形式返回计数结果。下面是一个示例:

# 使用Counter统计序列中每个元素出现的次数

from collections import Counter

s = "hello world from python"

c = Counter(s)

print(c)

输出结果为:

Counter({'o': 4, 'l': 3, 'h': 1, 'e': 1, ' ': 3, 'w': 1, 'r': 1, 'd': 1, 'f': 1, 'm': 1, 'p': 1, 'y': 1, 't': 1, 'n': 1})

可以看到,Counter将序列中的元素转换为键,出现次数转换为值。这对于统计频率分布非常有用。

5. deque

deque是Python内置模块collections中的一个重要数据结构。它是一个双向队列,支持从队列的两端添加或删除元素。使用deque可以使头尾操作都达到O(1)的时间复杂度。下面是一个示例:

# 使用deque实现队列功能

from collections import deque

q = deque()

# 元素入队

q.append("a")

q.append("b")

q.appendleft("c")

# 元素出队

print(q.pop())

print(q.popleft())

print(q)

输出结果为:

b

c

deque(['a'])

在以上示例中,元素c先入队,然后元素a和b从右边入队,最后我们按照先进先出的规则从左右两端分别弹出元素。

结语

以上就是Python内置模块collections的五个常用数据结构。这些数据结构在处理数据时非常有用,它们不仅提高了程序的性能,同时也提高了代码的可读性和可维护性。我们可以充分利用这些数据结构,并在实际开发中善于发掘它们的潜力,以达到完美的效果。

后端开发标签