使用 Python 刷题时可能会用到的技巧

在使用 Python 刷题的过程中发现了许多以前不知道的操作,用这篇博客记录一下,持续更新。

  1. 字典的具体实现就是一个哈希表,所以只要是 hashable 的对象都可以作为 key,比如 tuple,就是说可以直接使用一个元组作为字典的键,但是列表是不可以的。
w = (1,2,3)
i = (2,3,4)
dic = {w:1, i:2}
print(dic[w])
out: 1
  1. sorted 函数有一些 option 可以利用。首先,可以指定根据可迭代对象的某个元素进行排序,其次就是可以控制升降序
a = [[1,4], [4,6], [8,5]]
b = sorted(a, key=lambda x:x[1])
b
out:[[1,4], [8,5], [4,6]]

a = [[1,4], [4,6], [8,5]]
b = sorted(a, key=lambda x:x[1], reverse=True)
b
out:[[4,6], [8,5], [1,4]]
  1. 在初始化多维数组的时候不要用乘法,一定要用列表推导式的形式,除非你就是想要一个很特别的数组
# 否则会出现跟你想象中不同的结果,除非你想要一个很特别的数组
a = [[0,0,0]] * 3
a[1][1] = 1
a
out:[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

a = [[0,0,0] for _ in range(3)]
a[1][1] = 1
a
out:[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
  1. 输入:将一行整数输入列表
a = list(map(int, sys.stdin.readline().split()))
  1. 在使用递归时经常要进行向列表中添加元素,或者向集合中添加元素的操作,但是一般的 list.append() 和 set.add() 操作都是没有返回值的,这时候要采用 + 操作符和 | 操作符
def recurse(1, alist):
	if len(alist) == 10: return
	recurse(1, alist+[1])

def recurse1(x, aset):
	if 10 in aset: return
	recurse(x+1, aset | {x})
  1. 二分查找模块 bisect 。Python 内置的二分查找模块,当算法用到二分查找时,使用这个模块是最便捷高效的。
import bisect
a, x = [0,2,4,6,7], 4
print(bisect.bisect_left(a, x)) #当x在列表中时,返回x的位置
print(bisect.bisect_right(a, x)) #当x在列表中时,返回x的位置
out:
2
3
print(bisect.bisect_left(a, 3)) #当x不在列表中时,返回x应插入的位置
print(bisect.bisect_right(a, 3)) #当x不在列表中时,返回x应插入的位置
out:
2
2

你可能感兴趣的:(LeetCode,Algorithm)