队列
在 Python 中,队列(Queue)是一种先进先出(FIFO)的数据结构,通常用于在多线程环境中安全地传递数据。Python 的 queue
模块提供了多种队列实现,包括:
Queue.Queue
:标准的先进先出队列(FIFO)。Queue.LifoQueue
:后进先出队列(LIFO),类似于堆栈。Queue.PriorityQueue
:优先级队列,元素按优先级顺序出队。
这些队列都是线程安全的,适用于多线程编程。
队列中常用的方法
put(item, block=True, timeout=None)
:将元素放入队列。get(block=True, timeout=None)
:从队列中取出元素。empty()
:判断队列是否为空。full()
:判断队列是否已满。qsize()
:返回队列中的元素数量。
舞伴问题
示例代码
from queue import Queue
def dance_partner(arr):
male_queue = Queue()
female_queue = Queue()
for person in arr:
name, gender = person
if gender == 'M':
male_queue.put(name)
elif gender == 'F':
female_queue.put(name)
# 配对舞伴
while not male_queue.empty() and not female_queue.empty():
male = male_queue.get()
female = female_queue.get()
print(f"舞伴: {male} 和 {female}")
# 输出仍在等待配对者
if not male_queue.empty():#如果男士队列不为空,说明还有男士等待配对
print(f"等待配对的男士: {male_queue.queue[0]}")
if not female_queue.empty():
print(f"等待配对的女士: {female_queue.queue[0]}")
# 测试
arr = [
("张三", "M"),
("李四", "F"),
("王五", "M"),
("赵六", "F"),
("钱七", "M")
]
dance_partner(arr)
运行结果