C++和Java等语言都有++和–操作,为什么以方便自居的Python却没有这种操作呢?
Python的数值对象
1 | a = 1 |
- Python数值对象都是不可变类型,与String一样,所以不能修改对象内部数据
- C++中的
i++修改内存中对象本身,数值增加1,而Python不能修改对象本身 - 与C++中字符串可以修改,Python中不能修改是一个道理
凡事预则立,不预则废
C++和Java等语言都有++和–操作,为什么以方便自居的Python却没有这种操作呢?
1 | a = 1 |
i++修改内存中对象本身,数值增加1,而Python不能修改对象本身本文介绍Python中优先队列的用法
queue并不能算是Python标准库,所以在LeetCode等OJ环境中不能使用, 想要使用优先队列的话可以使用Python的标准库heapqheapq的使用请参考 Python——heapq模块-最大堆最小堆1 | from Queue import PriorityQueue |
queue包名已经弃用,测试发现本地Python2.7环境可以用,但是LeetCode线上环境不能用Queue1 | from Queue import PriorityQueue |
不能使用not pq这样的语句判断优先队列是否收敛,他不是普通的内嵌对象(list,str等是内嵌对象),除非pq == None否则,双端队列对象永远为not pq == False
下面用法最优:
1 | while pq.qsize(): |
PriorityQueue中默认递增排序(这一点与Python中的sorted函数和sort()函数一样),每次get(),移除并返回最小的对象
PriorityQueue中,可以同时添加不同类别的对象
PriorityQueue会将对象首先按照类别排序,然后各个类别内部按照不同数值排序
若传入对象是可以直接比较大小的类型即可直接传入,包括tuple, list, str, int(long)等类型
1 | ls = [(1, 'b'), (1, 'a'), (2, 'a'), [1, 'a'], [1, 'b'], [2, 'a'], '1a', '1b', '2a', 1, 2, 3, None] |
在做算法题时,没必要的情况下不建议使用
在做工程时建议使用这种方式
1 | import Queue |
注意__lt__函数中是小于号,说明递增排序,大于号,说明递减排序
PriorityQueue对象不是普通Python内嵌对象,不能使用Python内嵌的len函数