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 ...
随机推荐
- jQuery-PHP跨域请求数据
jQuery: //获取域名 function getDomain(url){ var a = document.createElement('a'); a.href = url; url=a.hos ...
- 线程锁、threading.local(flask源码中用的到)、线程池、生产者消费者模型
一.线程锁 线程安全,多线程操作时,内部会让所有线程排队处理.如:list/dict/Queue 线程不安全 + 人(锁) => 排队处理 1.RLock/Lock:一次放一个 a.创建10个线 ...
- ExtJS4 给同一个formpanel不同的url
formpanel能够这样使用,api上的样例: var panel=Ext.create('Ext.form.Panel', { title: 'Simple Form', bodyPadding: ...
- hexo+yilia页脚添加总访问量
个人博客:https://www.yuehan.online 现在博客:http://www.wangyurui.top 脚本方法使用不蒜子计数 安装脚本 要使用不蒜子(官网:http://busua ...
- 升级到tomcat8遇到The method getDispatcherType() is undefined for the type HttpServletRequest
今天升级到tomcat8,发现原来的项目不能运行了,遇到下面的错误:The method getDispatcherType() is undefined for the type HttpServl ...
- Python基础-re正则模块
一.简介: 正则表达式:是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 二.字 ...
- 深入理解MVC架构
MVC MVC是一种设计模式(Design pattern),也就是一种解决问题的方法和思路, 是上世纪80年代提出的,到现在已经颇有历史了. MVC的意义在于指导开发者将数据与表现解耦,提高代码,特 ...
- 曾经跳过的坑----jQuery mouseover与mouseenter,mouseout与mouseleave的区别
mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseou ...
- 流量分析系统---echarts模拟迁移中 ,geocoord从后台获取动态数值
由于在echarts的使用手册中说了 {Object} geoCoord (geoCoord是Object类型) ,所以不能用传统的字符串拼接或数组的方式赋值.在后台的controller中用Map& ...
- openstack ocata版(脚本)控制节点安装
一.初始化环境: 1.更换yum源: yum install -y wget mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS- ...