Python进阶:解密collections库的高级功能

目录

一、常见类的介绍

二、Counter类的使用

1. Counter类的定义和功能说明

2. 统计列表或字符串中元素的出现次数

3. 获取出现频率最高的元素

4. 合并多个Counter对象

5. 排序Counter对象

三、defaultdict类的使用

1. defaultdict类的定义和特点

2. 创建具有默认值的字典

3. 处理字典中不存在的键

4. defaultdict与其他数据结构的结合应用

四、deque类的详细使用

1. 创建deque对象

2. 基本操作

3. 旋转操作

4. 手动实现一个双端队列

总结

Python进阶:解密collections库的高级功能_第1张图片

Python内置库collections提供了一些强大的工具类,可以简化和优化我们的编程过程。本文将重点探索collections库中的几个类的使用。通过详细的代码示例和解释,展示如何利用Counter计数和统计元素,以及如何使用defaultdict创建有默认值的字典。本文旨在为Python初学者提供清晰的指导,同时为其他开发者提供一些启发。 

一、常见类的介绍

Pythoncollections这个库包含的内置对象很多,这个是内置库源码的一部分,如下所示:

__all__ = [
    'ChainMap',
    'Counter',
    'OrderedDict',
    'UserDict',
    'UserList',
    'UserString',
    'defaultdict',
    'deque',
    'namedtuple',
]

本文主要介绍的Counter和defaultdict类还有双端队列deque的意义和用途,这几个类比较常见,可以来详细剖析一下。

二、Counter类的使用

1. Counter类的定义和功能说明

Counter是一个用于跟踪值出现次数的有序集合。它可以接收一个可迭代对象作为参数,并生成一个字典,其中包含每个元素作为键,其计数作为值。

2. 统计列表或字符串中元素的出现次数

示例代码:

from collections import Counter

lst = [1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4]
counter = Counter(lst)
print(counter)

# 输出结果:是一个类似字典的一个对象
# Counter({1: 3, 2: 3, 3: 2, 4: 2, 5: 1})
3. 获取出现频率最高的元素

示例代码:

from collections import Counter

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

# 输出结果:
# [(1, 3), (2, 3)]
4. 合并多个Counter对象

示例代码:

from collections import Counter

counter1 = Counter([1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4])
counter2 = Counter([1, 2, 3, 4, 5, 6, 7])
combined = counter1 + counter2
print(combined)

# 输出结果:
# Counter({1: 4, 2: 4, 3: 3, 4: 3, 5: 2, 6: 1, 7: 1})
5. 排序Counter对象

示例代码:

from collections import Counter

lst = [1, 2, 3, 1, 2, 1, 2, 3, 4, 5, 4]
counter = Counter(lst)
sorted_counter = counter.most_common()
print(sorted_counter)

# 输出结果:
# [(1, 3), (2, 3), (3, 2), (4, 2), (5, 1)]

请记住,以上示例只是简要说明该章节的内容。在实际应用中,你可以根据自己的需求和具体情况来进一步优化和扩展代码示例。希望这些示例能够对你的学习和应用提供一些启发!如果你有任何更具体的问题,我们很乐意帮助你解答。

三、defaultdict类的使用

1. defaultdict类的定义和特点

defaultdict是collections库中的一个字典子类,它是用来创建具有默认值的字典。与普通字典不同,当我们访问一个不存在的键时,defaultdict会自动为该键分配一个默认值。

2. 创建具有默认值的字典

示例代码:

from collections import defaultdict

# 创建一个空的defaultdict,指定默认值为0

d = defaultdict(int)

# 访问一个不存在的键,则会自动分配默认值0

print(d['a'])
print(d['b'])
print(d['c'])

输出结果:
0
0
0
3. 处理字典中不存在的键

示例代码:

from collections import defaultdict

# 创建一个defaultdict,并指定默认值为字符串"Undefined"

d = defaultdict(lambda: "Undefined")

# 访问一个不存在的键,则会自动分配默认值"Undefined"

print(d['name'])
print(d['age'])

输出结果:
Undefined
Undefined
4. defaultdict与其他数据结构的结合应用

示例代码:

from collections import defaultdict

创建一个defaultdict,将每个字母作为键,对应的值为一个列表

d = defaultdict(list)

将一些值添加到列表中

d['a'].append(1)
d['a'].append(2)
d['b'].append(3)

输出结果

print(d)

输出结果:
defaultdict(, {'a': [1, 2], 'b': [3]})

在上述示例中,我们通过defaultdict类创建了具有默认值的字典,并展示了其处理不存在的键的功能。通过合理设置指定的默认值,defaultdict在处理字典中不存在的键时能够提供更好的灵活性和方便性。你可以根据具体的需求和应用场景,调整和扩展这些示例代码,以便更好地利用defaultdict类实现你的功能。

四、deque类的详细使用

deque(双端队列)是collections库中的一个类,它是一个线程安全、可以在两端进行高效插入和删除操作的数据结构。deque类实现了类似列表的功能,但在处理频繁的首尾插入和删除时更加高效。

1. 创建deque对象

可以通过引入collections库并调用deque类来创建deque对象。可以在创建时指定初始元素。示例代码:

from collections import deque

# 创建空的deque对象
d = deque()

# 创建带有初始元素的deque对象
d = deque([1, 2, 3])
2. 基本操作

deque对象支持类似列表的基本操作,如索引、切片、追加、插入、删除等。示例代码如下:

from collections import deque

# 创建一个deque对象
d3 = deque([1, 2, 3, 4, 5])

# 访问元素
print(d3[0])  # 输出第一个元素
# 1

(1)追加元素到队尾:

d3.append(6)
print(d3)

deque([1, 2, 3, 4, 5, 6])

(2)追加元素到队首:

d3.appendleft(0)
print(d3)

deque([0, 1, 2, 3, 4, 5, 6])

(3)弹出队尾元素

d3.pop()
print(d3)
d3.pop()
print(d3)

deque([0, 1, 2, 3, 4, 5])

(4)弹出队首元素

d3.popleft()
print(d3)

deque([1, 2, 3, 4, 5])

(5)在指定位置插入元素

d3.insert(2, 100)
print(d3)

deque([1, 2, 100, 3, 4, 5])

(6)移除指定元素

d3.remove(3)
print(d3)

deque([1, 2, 100, 4, 5])

3. 旋转操作

deque对象可以进行旋转操作,可以将队尾的元素移动到队首或者将队首的元素移动到队尾。示例代码:

from collections import deque

# 创建一个deque对象

d = deque([1, 2, 3, 4, 5])

# 旋转操作,将队尾元素移动到队首

d.rotate(1)
print(d)

# 旋转操作,将队首元素移动到队尾

d.rotate(-1)
print(d)


# deque([5, 1, 2, 3, 4])
# deque([1, 2, 3, 4, 5])
4. 手动实现一个双端队列

可以自己对deque进行封装,实现一个队列,如下所示:

from collections import deque


class MyQueue:
    """
    使用 collections.deque 可以迅速实现一个队列
    """

    def __init__(self):
        self.items = deque()

    def append(self, val):
        return self.items.append(val)

    def pop(self):
        return self.items.popleft()

    def __len__(self):
        return len(self.items)

    def empty(self):
        return len(self.items) == 0

    def front(self):
        return self.items[0]

通过以上示例代码,我们可以看到deque类的基本操作和使用方法。deque对象可以高效地进行队首和队尾的插入和删除操作,是处理队列数据的理想选择。你可以根据具体的需求和场景调整和扩展这些示例代码,以便更好地应用deque类的强大功能。

总结

通过本文的探索与示例,读者可以更好地理解和掌握collections库中Counter和defaultdict类的使用方法。这些强大的工具类可以极大地提高编程过程的效率,并为处理计数、统计和字典操作提供便利。希望本文能够给读者带来启发,并激发更多关于collections库的学习与实践。

你可能感兴趣的:(python,java,前端)