每日一题1.1-读《Python Codebook》
1.1 将序列分解为单独的变量
简单的赋值操作。
1.2从任意长度的可迭代对象中分解元素
“*表达式”得到列表。
1.3保存最后N个元素
collection.deque方法
collections.deque
是Python标准库collections
模块中的一个类,提供了一个双端队列。双端队列(deque,全称double-ended queue)是一种具有队列和栈性质的抽象数据类型。它允许你从两端附加和弹出元素,因此提供了一种灵活的数据存储方式。
collections.deque
的主要特点和用法包括:
- 快速添加和弹出:与列表相比,
deque
在两端添加(append)和弹出(pop)操作的时间复杂度都是O(1),而列表在头部添加和弹出的时间复杂度是O(n)。 - 线程安全:
deque
是线程安全的,可以在多线程环境中使用,而无需额外的锁定机制。 - 支持最大长度:可以限制
deque
的大小。当限定的大小被超出时,添加新元素会导致对应端的旧元素被移除。 - 支持迭代:
deque
支持迭代,可以像列表一样进行循环遍历。 - 支持索引访问:虽然
deque
支持从两端快速添加和弹出元素,但也支持索引访问。不过,索引访问的时间复杂度是O(n),因此在大量数据的情况下不推荐使用。
1 | from collections import deque |
yield关键字
在Python中,
yield
是一个关键字,用于从一个函数返回一个生成器(generator)。使用yield
的函数被称为生成器函数。生成器提供了一种方式来产生数据序列,但与返回列表不同,生成器一次只产生一个值,这样可以减少内存使用,提高效率,特别是在处理大数据集时。
使用yield
的函数在执行时,每遇到一个yield
语句就会暂停并保存当前所有的运行信息,返回yield
的值,并在下一次执行next()
方法时从当前位置继续运行。
以下是yield
的一些主要特点:
- 惰性求值:生成器只有在需要产生下一个数据时才会执行。
- 状态保持:生成器函数在暂停执行时,会保持其状态,包括局部变量和指针信息,等待下一次从上次离开的地方继续执行。
- 内存效率:由于一次只处理一个数据项,生成器不需要像列表那样存储整个数据集,这对于大数据处理非常有用。
1 | def simple_generator(): |
生成器非常适合于遍历大文件、表示无限序列和处理流式数据等场景。使用yield
可以使代码更加清晰,更易于理解,同时提高程序的性能。
1.4 找到最小或最大的元素
heapq模块的nlargest()和nsmallest()方法。这两个函数都可以接受一个参数key。
1.5 实现优先级队列
利用heapq模块,引入index生成一个堆,依此弹出即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 NULL!