1.1 将序列分解为单独的变量

简单的赋值操作。

1.2从任意长度的可迭代对象中分解元素

“*表达式”得到列表。

1.3保存最后N个元素

collection.deque方法

collections.deque是Python标准库collections模块中的一个类,提供了一个双端队列。双端队列(deque,全称double-ended queue)是一种具有队列和栈性质的抽象数据类型。它允许你从两端附加和弹出元素,因此提供了一种灵活的数据存储方式。

collections.deque的主要特点和用法包括:

  1. 快速添加和弹出:与列表相比,deque在两端添加(append)和弹出(pop)操作的时间复杂度都是O(1),而列表在头部添加和弹出的时间复杂度是O(n)。
  2. 线程安全deque是线程安全的,可以在多线程环境中使用,而无需额外的锁定机制。
  3. 支持最大长度:可以限制deque的大小。当限定的大小被超出时,添加新元素会导致对应端的旧元素被移除。
  4. 支持迭代deque支持迭代,可以像列表一样进行循环遍历。
  5. 支持索引访问:虽然deque支持从两端快速添加和弹出元素,但也支持索引访问。不过,索引访问的时间复杂度是O(n),因此在大量数据的情况下不推荐使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from collections import deque

# 创建一个空的双端队列
d = deque()

# 在右侧添加元素
d.append(1)
d.append(2)

# 在左侧添加元素
d.appendleft(0)

# 弹出右侧元素
right_elem = d.pop() # 返回2

# 弹出左侧元素
left_elem = d.popleft() # 返回0

# 指定最大长度创建deque
limited_d = deque(maxlen=2)
limited_d.append(1)
limited_d.append(2)
limited_d.append(3) # 添加3的同时,1会从左侧被移除

print(d) # 输出当前deque的内容
print(limited_d) # 输出限定长度的deque内容

yield关键字

在Python中,yield是一个关键字,用于从一个函数返回一个生成器(generator)。使用yield的函数被称为生成器函数。生成器提供了一种方式来产生数据序列,但与返回列表不同,生成器一次只产生一个值,这样可以减少内存使用,提高效率,特别是在处理大数据集时。

使用yield的函数在执行时,每遇到一个yield语句就会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行。
以下是yield的一些主要特点:

  1. 惰性求值:生成器只有在需要产生下一个数据时才会执行。
  2. 状态保持:生成器函数在暂停执行时,会保持其状态,包括局部变量和指针信息,等待下一次从上次离开的地方继续执行。
  3. 内存效率:由于一次只处理一个数据项,生成器不需要像列表那样存储整个数据集,这对于大数据处理非常有用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def simple_generator():
yield 1
yield 2
yield 3

# 创建一个生成器对象
gen = simple_generator()

# 使用next()获取生成器的下一个元素
print(next(gen)) # 输出 1
print(next(gen)) # 输出 2
print(next(gen)) # 输出 3

# 再次调用next(gen)将会抛出StopIteration异常,因为生成器没有更多的元素

生成器非常适合于遍历大文件、表示无限序列和处理流式数据等场景。使用yield可以使代码更加清晰,更易于理解,同时提高程序的性能。

1.4 找到最小或最大的元素

heapq模块的nlargest()和nsmallest()方法。这两个函数都可以接受一个参数key。

1.5 实现优先级队列

利用heapq模块,引入index生成一个堆,依此弹出即可。