工具函数

一些常用的函数

1
2
3
4
5
6
7
8
9
max()
min()
int()
str()
len()
pow(x, y) # x的y次幂
bin() # 二进制表示
range(start, end, step)
xrange(start, end, step) # 与range函数的区别就是,该函数是一个一个生成值的。


要学会利用range函数生成倒序的序列

1
2
for i in range(5, -1, -1):
print i # 5, 4, 3, 2, 1, 0


生成二维数组

1
array = [[0] * col for i in range(row)]

不要使用列表乘法的方式如:[[0] col] row因为它只是引用了对方的地址。

迭代工具

1
2
3
filter(function, iterable)
map(function, iterable)
reduce(function, iterable)


内置模块

双端队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>>> from collections import deque
>>>> help(deque)
class deque(__builtin__.object):
__getitem__(...)
__setitem__(...)
__len__(...)
append(...) # 入队
appendleft(...) # 左侧入队
extend(...) # 扩展队列元素
extendleft(...) # 左侧扩展队列元素
pop(...) # 右侧出队
popleft(...) # 左侧出队
remove(...) # 删除某个元素
rotate(...) # 头结点向右移动n个位置


1
2
3
4
5
6
7
8
9
10
>>>> from heapq import *
>>>> heap = []
heapify(heap) # 将一个列表转化为堆
heappop(heap) # 返回小顶堆中最小的元素
heappush(heap, x) # 将元素加入到堆中
heapreplace(heap, x) # 将堆中最小的元素弹出,同时将x入堆

Python中的堆默认是小顶堆,如果想实现的大顶堆的话(只能是正数),可以像下面这样使用:

1
2
3
4
5
# 构建堆
heappush(heap, -x)
# 获得最大值
-heappop(heap)


正则

正则表达式是可以匹配文本片段的模式。

正则需要注意的几点:

  1. 使用原生字符串如:r’python\.org’,避免多次使用’\\.’让re模块转义和解释器两次转义。
  2. re.match()函数在字符串的开始处匹配模式,如果想匹配整个字符串,可以在结尾家美元符。
  3. 正则默认为贪婪模式,可以在子模式后加?改为非贪婪模式,如:pattern = r’\\(.+?)\\‘。

集合

初始化,集合是由序列(或者其他可迭代的对象)构建的。

1
2
>>> set([0, 1, 2, 3, 0, 1, 2, 3, 4, 5])
set([0, 1, 2, 3, 4, 5])

性质

  • 集合中元素的顺序是随意的。
  • 集合是可变的,不能用做字典中的健。
  • 集合只能包含不可变的值,所以不能包含其他集合。

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> a = set([1, 2, 3])
>>> b = set([2, 3 ,4])
# 并集
>>> a | b
set([1, 2, 3, ,4])
# 交集
>>> a & b
set([2, 3])
# 差集
>>> a - b
set([1])
# 异或
>>> a ^ b
set([1, 4])
# 复制
>>> a.copy()
set([1, 2, 3])
>>> a.copy() is a
False


排列组合

1
2
3
4
5
6
from itertools import combinations, permutations
s = 'abc'
p = list(permutations(s)) # [('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a','b'), ('c', 'b', 'a')]
c = list(combinations(s, 2)) # [('a', 'b'), ('a', 'c'), ('b', 'c')]


sys

sys这个模块让你能够访问与Python解释器联系紧密的变量和函数。

1
2
3
sys.stdin
sys.stdout
sys.stderr

sys.stdin、sys.stdout、sys.stderr模块变量是类文件流对象。它们表示标准UNIX概念中的标准输入、标准输出和标准出错。

sys.stdin与raw_input的区别是:

  • sys.stdin会一直获取输入,可以通过sys.stdin.read(),sys.stdin.readline()等方法获取想要的内容,readline()获取的内容带换行符。
  • raw_input获取输入的时候,当输入回车后就停止了输入,raw_input获取的内容不带换行符。

该知识点在此编程题中体现