醋醋百科网

Good Luck To You!

AI最火语言python之队列_ai python

1. 简介

队列(Queue)是一种特殊的线性表,它只允许在表的一端进行插入操作,在另一端进行删除操作。允许插入的一端称为队尾,允许删除的一端称为队头。python的 queue 模块,提供了多种队列类,能够更高效、安全地处理队列相关的操作,尤其在多线程环境下。

queue模块是Python内置的标准模块,模块实现了五种主要类型的队列:deque双端队列、Queue先进先出(FIFO)队列、LifoQueue后进先出LIFO队列、PriorityQueue优先级队列,以及SimpleQueue 先入先出类型的简单队列

2.常见列表操作

(1)创建队列

直接初始化一个空列表即可,例如 my_queue = []。

(2)入队(enqueue)

使用列表的 append() 方法将元素添加到列表末尾,相当于队尾插入元素。例如,my_queue.append(item)。

(3)出队(dequeue)

使用列表的 pop(0) 方法移除并返回列表的第一个元素,相当于队头删除元素。例如,item = my_queue.pop(0)。注意,这种方法在队列较大时效率较低,因为每次从队头删除元素后,列表中所有后续元素都需要向前移动一个位置。

(4)判断队列是否为空

检查列表长度是否为 0,即 if not my_queue:。

(5)获取队列大小

使用 len() 函数获取列表长度,例如 size = len(my_queue)。

2. deque双端队列

双端队列又叫双边队列。deque中的方法基本都有两侧版本,这就体现了双端队列的特征。deque 的左边(left)就相当于它是队列头(front),右边(right)就相当于它是队列尾(rear),默认右侧队尾。

1)创建双端队列

可以通过 collections.deque() 来创建一个空的双端队列。

也可以传入一个可迭代对象来初始化双端队列,例如列表、字符串等,元素会按照可迭代对象的顺序添加到双端队列的右侧。

from collections import deque
deque_empty = deque()
print("创建空双端队列:", deque_empty)
deque_from_list = deque([1, 2, 3])
print("用列表初始化双端队列:", deque_from_list)
deque_from_str = deque("abc")
print("用字符串初始化双端队列:", deque_from_str)

程序运行结果:

(2)添加元素

  • append(item)

将元素 item 添加到双端队列的右侧。

from collections import deque
dq = deque([1, 2, 3])
print("创建双端队列:", dq)
dq.append(4)
print("右侧添加元素后的双端队列:", dq)

程序运行结构:

  • appendleft(item)

将元素 item 添加到双端队列的左侧。

样例:

from collections import deque
dq = deque([1, 2, 3])
print("创建双端队列:", dq)
dq.appendleft(0)
print("左侧添加元素后的双端队列:", dq)

程序运行结果:

(3)移除元素

  • pop()

移除队列右侧元素并返回移除元素后的队列。如果队列为空,会抛出 IndexError 异常。

样例:

from collections import deque
dq = deque([1, 2, 3, 4])
print("创建双端队列:", dq)
# 从右侧移除元素
item = dq.pop()
print("移除的元素:", item)
print("移除元素后的双端队列:", dq)

程序运行结果:

  • popleft()

从左侧移除元素并返回移除元素后的队列。如果队列为空,会抛出 IndexError 异常。

样例:

from collections import deque
dq = deque([1, 2, 3, 4])
print("初始双端队列:", dq)
# 从左侧移除元素
item = dq.popleft()
print("移除的元素:", item)
print("移除元素后的双端队列:", dq)

运行结果:

  • remove(value)

移除双端队列中***第一个***出现的值为 value 的元素。如果元素不存在,会抛出 ValueError 异常。

举例:

from collections import deque
dq = deque([1, 2, 3, 4, 2, 5, 8, 9])
print("创建双端队列:", dq)
dq.remove(2)
print("删除元素后的双端队列:", dq)

程序运行结果:

(4)查找元素

  • index(x[, start[, end]])

返回元素 x 在双端队列中的位置(下标)。可以指定搜索的起始位置(start)和结束位置(end)。如果元素不在范围内,会抛出 ValueError 异常。

样例:

from collections import deque
dq = deque([1, 2, 3, 4, 2, 5, 8, 9])
print("创建双端队列:", dq)
index_2 = dq.index(2)
print("元素 2 的位置:", index_2)
index_2_range = dq.index(2, 2, 5)
print("元素 2 在指定范围内的位置:", index_2_range)

程序运行结果:

我们在看一个查找的元素不在队列中的情况。

from collections import deque
dq = deque([1, 2, 3, 4, 2, 5, 8, 9])
print("创建双端队列:", dq)
index_2 = dq.index(22)
print("元素 2 的位置:", index_2)

程序运行结果:


确实报了ValueError的异常信息。

  • count(x)

返回元素 x 在双端队列中出现的次数。

样例:

from collections import deque
dq = deque([1, 2, 3, 2, 4, 2, 8, 9,2])
print("创建双端队列:", dq)
count_2 = dq.count(2)
print("元素 2 出现的次数:", count_2)

程序运行结果:

(4)扩展双端队列

  • extend(iterable)

将可迭代对象(iterable)中的元素添加到双端队列的右侧。

from collections import deque
dq = deque([1, 2, 3])
print("创建双端队列:", dq)
dq.extend([4, 5, 6])
print("右侧扩展后的双端队列:", dq)

程序运行结果:

  • extendleft(iterable)

将可迭代对象(iterable)中的元素添加到双端队列的左侧。注意,元素的添加顺序是可迭代对象的逆序。

from collections import deque
dq = deque([1, 2, 3])
print("初始双端队列:", dq)
dq.extendleft([0, -1, -2])
print("左侧扩展后的双端队列:", dq)

程序运行结果:注意观察加入的顺序。



(5)旋转队列

  • rotate(n=1)

将双端队列中的元素向右移动 n 步。如果 n 为负数,则向左移动。例如,当 n =1 时,最后一个元素移到队列头部,其他元素向右移动一位;当 n = -1 时,第一个元素移到队列尾部,其他元素向左移动一位。

样例:

from collections import deque
dq = deque([1, 2, 3, 4, 5])
print("初始双端队列:", dq)
dq.rotate(1)
print("向右旋转 1 步后的双端队列:", dq)
dq.rotate(-2)
print("向左旋转 2 步后的双端队列:", dq)

程序运行结果:



(6)清空双端队列

  • clear()

清空双端队列中的所有元素。

from collections import deque
dq = deque([1, 2, 3, 4, 5])
print("创建双端队列:", dq)
# 清空双端队列
dq.clear()
print("清空后的双端队列:", dq)

程序运行结果:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言