pythoncook 随记
第一章 数据结构与算法
1 赋值多个变量 *
2 collections deque 构造固定大小队列,插入删除比list快
3 查找最大和最小元素的N个元素 heapq nlargest() nsmallest()
4 实现一个优先级队列
5 字典中的键映射多个值 collections defaultdict
6 字典排序 collections OrderedDict
7 字典的运算 键值使用zip反转
8 查找两个字典的相同点 使用并交集 & - 字典 集合
9 删除序列相同元素并保持顺序 构建set集合
10 切片命名 slice
11 序列中最多的元素collections Counter 返回字典
12 通过某个关键字排序一个字典列表(列表元素是字典) operator itemgetter
sorted(rows, key=itemgetter('fname'))
min max
13 排序不支持原生比较的对象
14 通过某个字段记录分组 itertools groupby
groupby() 函数扫描整个序列并且查找连续相同值(或者根据指定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 \B
1、使用多个界定符分割字符
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、在正则式中使用Unicode
11、删除字符中不需要的字符
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 @^20s
14、合并拼接字符串
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
复数的三角函数运算 cmath
7、无穷大与NaN
正无穷、负无穷或NaN(非数字)的浮点数
>>> a=float('inf')
>>> a
inf
>>> b=float('-inf')
>>> b
-inf
>>> c=float('nan')
>>> c
nan
测试判断
>>> import math
>>> math.isinf(a)
True
>>> math.isinf(b)
True
>>> math.isnan(b)
False
>>> math.isnan(c)
True
8、分数运算
fractions
>>> from fractions import Fraction
>>> a=Fraction(5,4)
>>> b=Fraction(7,16)
>>> print(a*b)
35/64
9、大型数组运算
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.9688873083844298
12、基本的日期与时间转换
datetime模块 time calendar
dateutil
13、时区问题
使用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:
pass
with open('/etc/passwd') as f:
while True:
line = next(f, None)
if line is None:
break
print(line, end='')
2、代理迭代
3、使用生成器创建新的迭代模式
yield
4、实现迭代器协议
5、反向迭代
使用reversed()
a = [1, 2, 3, 4]
for x in reversed(a):
print(x)
自定义实现类的反向迭代 __reversed__()
6、带有外部状态的生成器函数
7、迭代器切片
使用itertools.islice()
islice() 会消耗掉传入的迭代器中的数据。 必须考虑到迭代器是不可逆的这个事实.
8、跳过可迭代对象的开始部分
使用itertools dropwhile
for 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 from
15、顺序迭代合并后的排序迭代对象
多个序列排序后,合并成一个序列并迭代遍历
heapq.merge()
16、迭代器代替while无线循环
pythoncook 随记的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 这些年一直记不住的 Java I/O
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...
- 千回百折:百度Java研发offer斩获记和经验分享
起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...
- 记一次nginx部署yii2项目时502 bad gateway错误的排查
周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...
- 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏
本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...
- ArcGIS中的标注和注记
在ArcMap中可以使用标注和注记来识别要素,选择标注或注记取决于你需要如何控制文本显示以及在ArcMap中如何存储文本. 1.标注只是临时显示相关数据或字段 2.标注用于长时间保存数据以及显示方式. ...
- 记处理线上记录垃圾日志 The view 'Error' or its master was not found
最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no vie ...
- 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...
随机推荐
- sqlbulk的问题
今天在bulk的时候遇到一个很“奇怪”的问题 无论怎样修改传入的值,也会报类型转换的错误.后来 在此文中找到了正解 bbs.csdn.net/topics/390430064 SqlBulkCopy不 ...
- <2013 12 17> 雅思写作、口语相关
这一个多月,参加了两次雅思考试,成绩分别为: Overall:6.5 L:7.0 R:7.5 W:6.0 S:5.5 Overall:7.0 L:7.0 ...
- Unity字体文件放Resources和打成ab对比
情况一:公共字体打成ab的时候,加载A界面的时候加载了font的ab,卸载A和font的ab后,接着加载B界面,加载了font的ab,卸载B和font的ab,这时候字体对应的asset会在内存里有两份 ...
- LinuxCentos系统安装Mariadb过程记录
MariaDB数据库简介 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜 ...
- Linux中的grep和cut
提取行: grep --color 着色 -v 不包含 提取列: cut -f 列号 提取第几列 -d 分隔符 以什么为分隔符,默认是制表键 局限性:如果分隔符不那 ...
- Linux中权限管理之ACL权限
1.简介: a.作用: 是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限 b.故事背景: 一个老师,给一个班的学员上课,他在l ...
- Facebook支持python的开源预测工具Prophet
Facebook 宣布开源一款基于 Python 和 R 语言的数据预测工具――“Prophet”,即“先知”.取名倒是非常直白. Facebook 表示,Prophet 相比现有预测工具更加人性化, ...
- djange数据库优化操作
一.all()命令分析 1.user_list = models.UserInfo.objects.all() #查询表一次可以得到该表的所有信息 注释:user_list.query可以查询到 ...
- IMG图片下面出现空格、下边距的解决办法
放图片的时候总有一个间隔,加上div看,是图片未充满div.最后父级元素加了一个 font-size:0,去掉了间隔. <div class="cut-img" style= ...
- arm64的适配问题,这次真醉了
写过tableView的童鞋都知道,有必须的两个代理方法要实现,还有几个选择实现的. 必须实现的代理方法: ~设置行数 - (NSInteger)tableView:(UITableView *)ta ...