python中元组比较大小
从第一个元素开始比较,如果不等则将第一个元素的比较结果作为整个元组的比较结果;
如果相等则寻找下一个元素重复上述比较过程
>>> (2,3,4)<(3,4)
True
>>> (2,3,4)<(2,3,5)
True
>>> (2,3,4)<(2,3,1)
False
优先队列
优先队列内部默认实现的是小根堆,具有的操作主要有:
向队列中添加元素 Queue.put(obj),每添加一个元素优先队列内部就会进行调整成最小堆;
从队列中获取元素 Queue.get(),每取出一个元素队列内部就会进行调整;
队列判空 Queue.empty()
队列大小 Queue.qsize()
队列存储的元素是数字:
>>> from queue import PriorityQueue
>>> q = PriorityQueue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> while not q.empty():
... print(q.get())
...
1
2
3
队列存储的元素是元组:
>>> q = PriorityQueue()
>>> q.put((1, "as"))
>>> q.put((3, "aas"))
>>> q.put((2, "zx"))
>>> q.get()
(1, 'as')
>>> q.get()
(2, 'zx')
>>> q.get()
(3, 'aas')
>>> q.get()
队列存储的元素是自己编写的类:
from queue import PriorityQueue
class comobj():
def __init__(self, key, name, sex):
# 优先级
self.key = key
# 具体的属性值,可以用类封装起来
self.name = name
self.sex = sex
def __lt__(self, other):# 这里的比较规则是:先根据key的大小判断,如果key相等则根据name判断
# 最后都形成小根堆
if self.key < other.key:
return True
elif self.key > other.key:
return False
else:
return self.name < other.name
def __str__(self):
return str(self.key) + " " + self.name + " " + self.sex
print("test1:")
q = PriorityQueue()
q.put(comobj(10, "zhu", "male"))
q.put(comobj(1, "zu", "male"))
q.put(comobj(12, "zh", "female"))
print(q.get())
print(q.get())
print(q.get())
print()
print("test2:")
q = PriorityQueue()
q.put(comobj(10, "zhu", "male"))
q.put(comobj(1, "zu", "male"))
q.put(comobj(12, "zh", "female"))
q.put(comobj(12, "zi", "female"))
print(q.get())
print(q.get())
print(q.get())
print(q.get())
"""输出结果:
test1:
1 zu male
10 zhu male
12 zh female
test2:
1 zu male
10 zhu male
12 zh female
12 zi female
"""
参考:
1. https://zhuanlan.zhihu.com/p/37637660
2. https://blog.csdn.net/lanchunhui/article/details/52316973
3. https://blog.csdn.net/liu2012huan/article/details/53264162