" /> " />

目 录CONTENT

文章目录

保留最后 N 个元素

Administrator
2024-09-24 / 0 评论 / 0 点赞 / 2 阅读 / 2471 字

在编程中,保留最后 N 个元素通常意味着你需要维护一个数据结构,该数据结构能够有效地存储和访问最后 N 个元素。常见的数据结构包括队列(Queue)、双端队列(Deque)和循环缓冲区(Circular Buffer)。

1. 使用双端队列(Deque)

双端队列(Deque)是一个可以在两端进行插入和删除操作的队列。Python 中的 collections.deque 是一个非常适合用来保留最后 N 个元素的数据结构,因为它支持高效的插入和删除操作。

from collections import deque

def keep_last_n_elements(iterable, n):
    # 创建一个最大长度为 n 的双端队列
    dq = deque(maxlen=n)
    
    # 遍历可迭代对象,将元素添加到双端队列中
    for item in iterable:
        dq.append(item)
    
    # 返回双端队列中的元素
    return list(dq)

# 示例
elements = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
last_n_elements = keep_last_n_elements(elements, n)
print(last_n_elements)  # 输出: [7, 8, 9]

2. 使用列表(List)

如果你使用的是列表,可以通过切片操作来获取最后 N 个元素。

def keep_last_n_elements(iterable, n):
    # 使用切片操作获取最后 n 个元素
    return iterable[-n:]

# 示例
elements = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
last_n_elements = keep_last_n_elements(elements, n)
print(last_n_elements)  # 输出: [7, 8, 9]

3. 使用循环缓冲区(Circular Buffer)

循环缓冲区是一种固定大小的缓冲区,当缓冲区满时,新元素会覆盖旧元素。你可以使用一个固定大小的数组来实现循环缓冲区。

class CircularBuffer:
    def __init__(self, size):
        self.size = size
        self.buffer = [None] * size
        self.index = 0

    def add(self, item):
        self.buffer[self.index] = item
        self.index = (self.index + 1) % self.size

    def get_elements(self):
        return self.buffer[self.index:] + self.buffer[:self.index]

# 示例
elements = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
cb = CircularBuffer(n)

for item in elements:
    cb.add(item)

last_n_elements = cb.get_elements()
print(last_n_elements)  # 输出: [7, 8, 9]

总结

  • 双端队列(Deque):适用于需要高效插入和删除操作的场景。
  • 列表(List):适用于简单的切片操作。
  • 循环缓冲区(Circular Buffer):适用于需要固定大小缓冲区的场景。

根据你的具体需求选择合适的数据结构。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区