文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 04:47

关注

一、常见类的介绍

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学习之旅内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯