1、求解列表最大值及其下标:
max(zip(nums, range(len(nums))))
2、反转列表:
reversed(range(n))
下面的写法与上面的写法等价
range(n, -1, -1)
下面的写法也能实现列表反转, 但是a[3:-1:-1]不能实现边截取边反转,只能通过list(reversed(a[0:4]))实现
a[::-1]
3、二维列表的截取:
[[a[i][j] for j in range(n // 2)] for i in range(n //2)]
跟matlab不同的是,下面写法无法对列进行截取,因为a[:n // 2]本身是一个二维列表
a[:n//2][:n//2]
4、堆的使用,如果使用大顶堆,需要对数值取反:
import queue q = queue.PriorityQueue() q.put(num) #放置元素 q.qsize() #获取队列长度 q.get() #取出堆顶元素 q.queue[0] #获取堆顶元素
该模块(queue.PriorityQueue)是从下面的模块(heap)总封装成的,具有线程安全的特点
import heap heapq.heapify(nums) #堆排序数组 heapq.heappush(heap, num) #放入元素 heapq.heappop(heap) #取出堆顶元素 nums[0] #获取堆顶元素
5、排序,自定义排序比较函数
from functools import cmp_to_key
def compare(x, y):
return int(y+x) - int(x+y)
nums = sorted(map(str, nums), key=cmp_to_key(compare))
6、 if a: 既会判断 a 是否非None, 是否列表非空,是否字符串不为空串,是否不为0,相当于if bool(a):
7、使用迭代器中序遍历二叉树:
def inOrder(p):
if not p: return
yield from inOrder(p.left)
yield p.val
yield from inOrder(p.right)
print(list(inOrder(root)))



