第一章 数据结构与算法
1 赋值多个变量 *
2 collections deque 构造固定大小队列,插入删除比list快3 查找最大和最小元素的N个元素 heapq nlargest() nsmallest()4 实现一个优先级队列 5 字典中的键映射多个值 collections defaultdict6 字典排序 collections OrderedDict7 字典的运算 键值使用zip反转8 查找两个字典的相同点 使用并交集 & - 字典 集合9 删除序列相同元素并保持顺序 构建set集合10 切片命名 slice11 序列中最多的元素collections Counter 返回字典12 通过某个关键字排序一个字典列表(列表元素是字典) operator itemgetter sorted(rows, key=itemgetter('fname')) min max13 排序不支持原生比较的对象 14 通过某个字段记录分组 itertools groupbygroupby() 函数扫描整个序列并且查找连续相同值(或者根据指定key函数返回值相同)的元素序列。 在每次迭代的时候,它会返回一个值和一个迭代器对象, 这个迭代器对象可以生成元素值全部等于上面那个值的组中所有对象。15 过滤序列元素 列表推导 filter(过滤条件(True,False),迭代值)16 从字典中提取子集 字典推导17 映射名称到序列元素18 转换并同时计算数据 19 合并多个字典或映射 collections ChainMap 第二章 字符串和文本 正则表达式 re包 r 原生字符 1 字符组 [ ] ^ - 2 通配符 . \d \D \s \S \w \W 3 重复 * + ? {n} {m,n} 4 或 | 5 首尾描述和单词边界 ^ $ \A \Z \b \B1、使用多个界定符分割字符
re.split() 注意匹配模式中的括号 捕获分组2、字符串开头或结尾匹配 startswith() endwith()3、用shell通配符匹配字符串 fnmatch() fnmatch() fnmatchcase()4、字符串匹配与搜索 str.find() re.match() re.findall() re.finditer()5、字符串的搜索与替换 str.replace()text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)calender month_abbr
6、字符串忽略大小写的搜索替换 使用re 的re.IGNORECASE re.findall('python',text,flags=re.IGNORECASE)7、最短匹配模式 非贪婪匹配*? +? ?? {m,n}?8、多行匹配模式 (?:.|\n) 指定了一个非捕获组 (也就是它定义了一个仅仅用来做匹配,而不能通过单独捕获或者编号的组)。 换行匹配9、将Unicode文本标准化 删除麻烦时需要先标准化10、在正则式中使用Unicode11、删除字符中不需要的字符 strip()左右 lstrip()左 rstrip()右 replace()替代中间 re.sub() lines = (line.strip() for line in f)12、审查清理文本字符串 translate 字符串转化13、字符串对齐 str.ljust() str.rjust() str.center() format() >20 <20 ^20 @^20s14、合并拼接字符串 join() '.'.join(parts) ','.join(str(d) for d in data) + 性能较差 'aaaa'+'bbbbb' 'aaaabbbbb' print(a, b, c, sep=':')15、字符串中插入便量 s = '{name} has {n} messages.' s.format(name='Guido', n=37) 'Guido has 37 messages.'16、指定字符串列宽 使用textwrap包17、在字符串中处理HTML和XML
import html from html.parser import HTMLPARSER 解析器18、字符串令牌解析
19、实现一个简单的递归下降分析器20、字节字符串上的字符串操作
2016-7-25
第三章 数字日期和时间1、数字的四舍五入 round函数 round(value,ndigits) 可以是小数或整数2、执行精确的浮点数运算 牺牲性能
使用decimal Decimal 数据库或金融方面3、数字的格式化输出
format()>>> x=1234.56789>>> format(x,'0.2f')'1234.57'>>> format(x,'>10.1f')' 1234.6'>>> format(x,'<10.1f')'1234.6 '>>> format(x,'^10.1f')' 1234.6 '>>> format(x,',')'1,234.56789'>>> format(x,'0,.1f')'1,234.6'>>> format(x,',')'1,234.56789'>>> format(x,'0,.1f')'1,234.6'>>> format(x,'e')'1.234568e+03'>>> format(x,'0.2e')'1.23e+03' >>> 'The value is {:0,.2f}'.format(x)'The value is 1,234.57'<>^前跟填充符使用'{}".format格式化时,:后跟填充符4、二八十六进制整数
bin() oct() hex() format(x,'b') format(x,'o') format(x,'x')5、字节到大整数的打包与解包
int.from_bytes() int.to_bytes()6、复数运算
>>> a=complex(2,4)>>> a(2+4j)>>> b=3+5j复数的三角函数运算 cmath7、无穷大与NaN
正无穷、负无穷或NaN(非数字)的浮点数>>> a=float('inf')>>> ainf>>> b=float('-inf')>>> b-inf>>> c=float('nan')>>> cnan测试判断>>> import math>>> math.isinf(a)True>>> math.isinf(b)True>>> math.isnan(b)False>>> math.isnan(c)True8、分数运算
fractions>>> from fractions import Fraction>>> a=Fraction(5,4)>>> b=Fraction(7,16)>>> print(a*b)35/649、大型数组运算
NumPy库10、矩阵与线性代数运算
NumPy库11、随机选择
random模块>>> import random产生随机数>>> values=[1,2,3,4,5]>>> random.choice(values)3提取N个元素>>> random.sample(values,2)[4, 5]打乱序列元素顺序>>> random.shuffle(values)>>> values[5, 1, 2, 4, 3]生成随机整数(均匀分布)>>> random.randint(0,10)1生成随机小数(均匀分布)>>> random.uniform(1,10)5.722191939956784生成0到1范围内的均匀分布的浮点数>>> random.random()0.7264309456697686>>> random.random()0.968887308384429812、基本的日期与时间转换
datetime模块 time calendar dateutil13、时区问题使用pytz模块 2016-7-30第四章 迭代器和生成器 itertools模块1、手动遍历迭代器def manual_iter(): with open('/etc/passwd') as f: try: while True: line = next(f) print(line, end='') except StopIteration: passwith open('/etc/passwd') as f:
while True: line = next(f, None) if line is None: break print(line, end='')2、代理迭代
3、使用生成器创建新的迭代模式 yield4、实现迭代器协议5、反向迭代使用reversed()a = [1, 2, 3, 4]for x in reversed(a): print(x)自定义实现类的反向迭代 __reversed__()6、带有外部状态的生成器函数7、迭代器切片使用itertools.islice() islice() 会消耗掉传入的迭代器中的数据。 必须考虑到迭代器是不可逆的这个事实.8、跳过可迭代对象的开始部分使用itertools dropwhilefor line in dropwhile(lambda line: line.startswith('#'), f):9、排列组合的迭代迭代遍历一个集合中元素的所有可能的排列或组合itertools.permutations() 输出元组可以指定长度for p in permutations(items, 2):使用 itertools.combinations() 可得到输入集合中元素的所有的组合
集合的子集,包括重复元素但是没有顺序itertools.combinations_with_replacement() 允许同一个元素被选择多次for c in combinations_with_replacement(items, 3):10、序列上的索引值迭代使用enumerate() 迭代值增加索引号for idx, val in enumerate(my_list,1): 1位置用于设置开始行号跟踪某些值在列表中的位置data = [ (1, 2), (3, 4), (5, 6), (7, 8) ]for n, i in enumerate(data):for n, (x, y) in enumerate(data):11、同时迭代多个序列使用zip() 生成元组迭代器itertools.zip_longest() 选择最长数组,用None补齐zip生成字典s=dict(zip(keys,values))12、不同集合上的元素迭代多个对象执行相同操作,迭代对象类型可以不相同>>> from itertools import chain>>> a = [1, 2, 3, 4]>>> b = ['x', 'y', 'z']>>> for x in chain(a, b):... print(x)13、创建数据处理管道14、展开嵌套的序列将一个多层嵌套的序列展开成一个单层列表yield from15、顺序迭代合并后的排序迭代对象多个序列排序后,合并成一个序列并迭代遍历heapq.merge()16、迭代器代替while无线循环