超越列表:使用 Python Deque 实现实时滑动窗口

停止移动列表中的元素!了解为什么 collections.deque 是您下一个 Python 项目中高性能滑动窗口、线程安全队列和高效数据流的秘密。文章《超越列表:使用 Python Deque 实现实时滑动窗口》首先出现在 Towards Data Science 上。

来源:走向数据科学

或简称为 deque,是一种不常见的集合类型。如果我们在互联网上搜索,我们会发现很多关于列表、字典和元组的信息,但关于双端队列的信息却很少。

Deque  (也可以发音为“deck” )是 Python 中一种有趣且有用的集合类型。它与其他对象的不同之处在于,它只会容纳您想要的物品数量或更少,而绝不会更多。

双端队列将仅容纳您确定的项目数量。再也不会了。

套牌到底是什么?

因此,它就像使用 FIFO 系统(先进先出)的牌组一样工作。一旦甲板已满,如果您追加另一个项目,它将删除左侧的第一个元素并将新元素添加到右侧。

让我们看一些基本示例来理解这个集合。首先,从集合导入:from collections import deque。

创建双端队列

接下来,我们将创建一个简单的牌组并向其中添加最大长度为 3 的项目。

# 创建一个包含 3 个(或更少)元素的新双端队列

my_deck = 双端队列(maxlen = 3)


                                    

                                        

# 添加一个元素

my_deck.append(1)

my_deck.append(2)

my_deck.append(3)

# 查看

我的甲板

# 双端队列([1, 2, 3])不错。一旦我们的牌组满了,观察当我尝试向它添加另一个值时会发生什么。左侧的第一个项目 (1) 被删除,为附加到右侧的新项目(额外)腾出空间。# 它删除第一个元素并在末尾添加新元素。my_deck.append('额外')双端队列([2, 3, '额外'])它的工作原理就像使用 FIFO 系统(先进先出)的牌组一样。将项目附加到左侧现在,请记住该集合被命名为双端队列;因此,您还可以向左侧追加或扩展元素。在这种情况下,自然会删除最右侧的元素。# 附加到左侧my_deck.appendleft('左')# [OUT]: 双端队列(['左', 2, 3])# 向左延伸my_deck.extendleft(['d', 'd'])#[OUT]: 双端队列(['d', 'd', '左'])旋转项目您还可以旋转元素,将它们向右或向左移动一个(或多个)位置。删除项目应用