工具函数
一些常用的函数
1 2 3 4 5 6 7 8 9
| max() min() int() str() len() pow(x, y) bin() range(start, end, step) xrange(start, end, step)
|
要学会利用range函数生成倒序的序列
1 2
| for i in range(5, -1, -1): print i
|
生成二维数组
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(...)
|
堆
1 2 3 4 5 6 7 8 9 10
| >>>> from heapq import * >>>> heap = [] heapify(heap) heappop(heap) heappush(heap, x) heapreplace(heap, x)
|
Python中的堆默认是小顶堆,如果想实现的大顶堆的话(只能是正数),可以像下面这样使用:
1 2 3 4 5
| heappush(heap, -x) -heappop(heap)
|
正则
正则表达式是可以匹配文本片段的模式。
正则需要注意的几点:
- 使用原生字符串如:r’python\.org’,避免多次使用’\\.’让re模块转义和解释器两次转义。
- re.match()函数在字符串的开始处匹配模式,如果想匹配整个字符串,可以在结尾家美元符。
- 正则默认为贪婪模式,可以在子模式后加?改为非贪婪模式,如: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)) c = list(combinations(s, 2))
|
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获取的内容不带换行符。
该知识点在此编程题中体现