Python优先级_queue put list numbers

2024-03-29 15:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在python模块中,比如priority_queue, 但我放入了一个整数列表,它会用列表中的最大值来比较它。在

示例:

priority_queue qu
a = [1,1,1,5]
b = [2,4,7,2]
c = [1,2,2]
qu.put(c)
qu.put(b)
qu.put(a)

qu.get() #will be b = [2,4,7,2], because max(b)=7 > max(a) > max(c)
qu.get() #will be a = [1,1,1,5], because max(a)=5 > max(c)
qu.get() #will be c = [1,2,3] 
#compare lsit by thier max value

我要尽快排这个队。 如果不存在模块,那么可能是具有c++优先级的cython队列 一点点改变课堂。 有可能吗?在


Tags: 模块示例列表getqueueput整数be
1条回答
网友
1楼 · 发布于 2024-03-29 15:06:37

插入时创建您自己的密钥,并将该密钥与列表配对插入:

a = [1,1,1,5]
b = [2,4,7,2]
c = [1,2,2]
# Use -max as key, since queue is ordered by smallest key
qu.put((-max(c), c))
qu.put((-max(b), b))
qu.put((-max(a), a))

qu.get()[1] #will be b = [2,4,7,2], because max(b)=7 > max(a) > max(c)
qu.get()[1] #will be a = [1,1,1,5], because max(a)=5 > max(c)
qu.get()[1] #will be c = [1,2,2] 

如果需要,您可以编写一个简单的PriorityQueue子类来自动完成put上的键控和{}上的剥离。最简单的版本是:

^{pr2}$

该类的行为将完全符合您的需要,而不需要手动创建和剥离键值(而且它将使用first to put的tiebreaker,而不是字典式列表比较,这要归功于使用itertools.count来生成连接符)。在

相关问题 更多 >