Python 循环缓冲区

 更新时间:2023年09月18日 14:17:01   作者:迹忆客  
Python 循环缓冲区是一种快速高效的数据存储方式。 循环数据缓冲区是一个队列,可以用作容纳单个对象的容器,这篇文章主要介绍了Python 循环缓冲区,需要的朋友可以参考下

循环缓冲区是环形缓冲区的另一个名称。 缓冲区是一种数据结构,它使用单个固定大小的缓冲区,就好像它是端到端连接的一样。

这种结构有助于管理数据流,其中可以在一端不断添加新数据,而可以从另一端删除旧数据。 当缓冲区已满时,新数据将覆盖最旧的数据。

Python 中的高效循环缓冲区

高效的循环缓冲区是一种允许高效插入和删除数据的数据结构。

循环缓冲区通常作为数组实现。 数组头指针指向第一个元素,尾指针指向数组中的最后一个元素。

头指针和尾指针在到达数组末尾时回绕。 插入循环缓冲区是通过递增头指针并将数据写入该位置的数组来完成的。

从循环缓冲区中删除是通过递增尾指针来完成的。 该数据并未从数组中删除,但头指针和尾指针有效地跳过了它。

循环缓冲区是一种高效的数据结构,因为它只需要固定数量的内存。 它也很容易实现。

class Buffer:
    def __init__(self, size):
        self.data = [None for i in range(size)]
    def append(self, x):
        self.data.pop(0)
        self.data.append(x)
    def get(self):
        return self.data
buf = Buffer(4)
for i in range(10):
    buf.append(i)
    print(buf.get())

输出:

[None, None, None, 0]
[None, None, 0, 1]
[None, 0, 1, 2]
[0, 1, 2, 3]
[1, 2, 3, 4]
[2, 3, 4, 5]
[3, 4, 5, 6]
[4, 5, 6, 7]
[5, 6, 7, 8]
[6, 7, 8, 9]

在 Python 中实现循环缓冲区

在 Python 中有很多方法可以实现高效的循环缓冲区。 一种常见的方法是使用 collections.dequeue 对象,该对象旨在有效地支持从队列的前端和后端移除和添加元素。

另一种方法是使用列表并分别跟踪头部和尾部索引。

如果您想知道哪种方法最好,则取决于应用程序的具体要求。 例如,如果元素需要频繁地从缓冲区中添加和删除,并且顺序不是必需的,那么出列方法可能是最好的。

另一方面,如果元素只被添加到缓冲区一次然后多次读出,或者如果顺序是必要的,那么列表方法可能更好。

在 Python 中使用 collections.enqueue 和 collections.dequeue 实现循环队列

首先,我们将使用函数 collections.enqueue 在队列中添加值。 然后,我们可以在循环队列中使用 collection.dequeue 从队列中删除一个元素。

为了理解它的工作原理,让我们看一下 Python 中循环队列的实际例子。

示例代码:

# implememting circular queue in python
class CircularQueue():
    def __init__(collections, k):
        collections.k = k
        collections.queue = [None] * k
        collections.head = collections.tail = -1
    # this function will insert (Enqueue) an element into the circular queue
    def enqueue1(collections, data):
        if ((collections.tail + 1) % collections.k == collections.head):
            print("The queue is full\n")
        elif (collections.head == -1):
            collections.head = 0
            collections.tail = 0
            collections.queue[collections.tail] = data
        else:
            collections.tail = (collections.tail + 1) % collections.k
            collections.queue[collections.tail] = data
    # this function will delete (dequeue) an element from the circular
    def dequeue1(collections):
        if (collections.head == -1):
            print("The circular queue is empty\n")
        elif (collections.head == collections.tail):
            temp = collections.queue[collections.head]
            collections.head = -1
            collections.tail = -1
            return temp
        else:
            temp = collections.queue[collections.head]
            collections.head = (collections.head + 1) % collections.k
            return temp
     # This function is used to print the queue
    def printCQueue1(collections):
        if(collections.head == -1):
            print("Circular queue is empty")
        elif (collections.tail >= collections.head):
            for i in range(collections.head, collections.tail + 1):
                print(collections.queue[i], end=" ")
            print()
        else:
            for i in range(collections.head, collections.k):
                print(collections.queue[i], end=" ")
            for i in range(0, collections.tail + 1):
                print(collections.queue[i], end=" ")
            print()
obj = CircularQueue(5)
# adding data to the queue
for i in range(1, 6):
    obj.enqueue1(i)
print("Display queue")
obj.printCQueue1()
# removing data from the queue
print("\nDelete Value:", obj.dequeue1())
print("Delete Value:", obj.dequeue1())
print("\nTwo values were deleted from the queue")
print("The new queue has 3 values now")
obj.printCQueue1()

输出:

Display queue
1 2 3 4 5

Delete Value: 1
Delete Value: 2

Two values were deleted from the queue
The new queue has 3 values now
3 4 5

Python循环缓冲区的优点

在 Python 中处理数据时使用循环缓冲区有很多优点。

  • 一个优点是它可以用于以先进先出 (FIFO) 方式存储数据。 当您需要按照接收数据的原始顺序处理数据时,这会有所帮助。
  • 另一个优点是循环缓冲区可以以后进先出 (LIFO) 的方式存储数据。 当您需要以接收数据的相反顺序处理数据时,这会很好。
  • 此外,循环缓冲区可用于以随机访问方式存储数据。 当您需要快速随机访问数据时,这会很有帮助。

Python循环缓冲区的缺点

在 Python 中使用循环缓冲区有一些缺点。

  • 首先,不可能随机访问缓冲区中的元素。 这可能会导致难以处理非线性顺序的数据。
  • 其次,缓冲区的大小是固定的。 如果您需要存储的数据多于缓冲区可以容纳的数据,这可能会导致问题。
  • 最后,循环缓冲区比其他数据结构更难调试。

总结

Python 循环缓冲区是一种快速高效的数据存储方式。 循环数据缓冲区是一个队列,可以用作容纳单个对象的容器。

当不断添加和删除数据时,例如在视频游戏或音频处理中,通常会使用循环缓冲区。 它可以用单个指针实现,而线性队列需要两个指针。

循环缓冲区可以很容易地扩展到多个队列,允许并发数据访问。

到此这篇关于Python 循环缓冲区的文章就介绍到这了,更多相关Python 循环缓冲区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python requests使用socks5的例子

    python requests使用socks5的例子

    今天小编就为大家分享一篇python requests使用socks5的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Django User 模块之 AbstractUser 扩展详解

    Django User 模块之 AbstractUser 扩展详解

    这篇文章主要介绍了Django User 模块之 AbstractUser 扩展详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python之list对应元素求和的方法

    Python之list对应元素求和的方法

    今天小编就为大家分享一篇Python之list对应元素求和的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python数组遍历的简单实现方法小结

    Python数组遍历的简单实现方法小结

    这篇文章主要介绍了Python数组遍历的简单实现方法,结合实例总结分析了Python针对数组的元素,索引常用遍历技巧,需要的朋友可以参考下
    2016-04-04
  • Python实现前端样式尺寸单位转换

    Python实现前端样式尺寸单位转换

    在 Web 前端项目开发时,样式尺寸都是以 rpx 为单位,可是 UI 设计师在看完开发后的 UI ,却要求都以 px 为单位,所以本文就和大家分享一个利用Python就能实现尺寸单位转换的方法吧
    2023-06-06
  • 详解python并发获取snmp信息及性能测试

    详解python并发获取snmp信息及性能测试

    本篇文章主要介绍了详解python并发获取snmp信息及性能测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Python随机值生成的常用方法总结

    Python随机值生成的常用方法总结

    这篇文章主要为大家详细介绍了Python中随机值生成的一些常用方法,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以了解一下
    2022-10-10
  • 基于Python+Pygame实现经典赛车游戏

    基于Python+Pygame实现经典赛车游戏

    这篇文章主要为大家分享了一个基于Python和Pygame实现的赛车小游戏,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下
    2022-04-04
  • Python3.6安装卸载、执行命令、执行py文件的方法详解

    Python3.6安装卸载、执行命令、执行py文件的方法详解

    这篇文章主要介绍了Python3.6之安装卸载、执行命令、执行py文件的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python使用smtplib模块通过gmail实现邮件发送的方法

    python使用smtplib模块通过gmail实现邮件发送的方法

    这篇文章主要介绍了python使用smtplib模块通过gmail实现邮件发送的方法,涉及Python使用smtplib模块发送邮件的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05

最新评论