总结一下在开发中使用的一些通用方法
获取从开始到某一子串最后出现之间的字符串
|
|
创建目录
|
|
保留两位小数
|
|
ip判断
|
|
copy和deepcopy
- 复制不可变数据类型(数值、字符串、元组),不管copy还是deepcopy,和=“赋值”的情况一样,新对象的id值与原来的值相同
复制可变数据类型(列表和字典)
copy有两种情况:- 复制的对象中无复杂子对象, 原来值的改变不会影响copy后的值。原来值的id值与浅复制原来的值不同
- 复制的对象中有复杂子对象(如有一个元素是一个列表),改变原来的之中的复杂子对象的值,会影响copy后的值
deepcopy: 完全独立复制,包括内层列表和字典
12345678910111213141516171819202122from copy import copy, deepcopya = '123' # 不可变对象b = copy(a)c = deepcopy(a)id(a) # 输出4399399016id(b) # 输出4399399016id(c) # 输出4399399016a = [1, 2, 3, 'a'] # 列表元素没有复杂子对象, copy和deepcopy后与原来的值独立,互不影响b = copy(a)c = deepcopy(a)id(a) # 输出 4398207176id(b) # 输出 4396980552id(c) # 输出 4399070728a = [1, 2, 3, ['a']] # 列表包含复杂子元素b = copy(a)c = copy(a)a[3][0] = 'b' # 把列表a嵌套的子列表元素修改为bprint(a) # 输出 [1, 2, 3, ['b']] # 修改后的列表aprint(b) # 输出 [1, 2, 3, ['b']] # 内嵌的列表受到原值的影响print(c) # 输出 [1, 2, 3, ['a']] # 未受影响
秒转换成时分秒
|
|
导入字符串module
python module 的动态加载,我们有时希望从配置文件等地获取要被动态加载的 module,但是所读取的配置项通常为字符串类型,
无法用 import 加载,例如:
注意:如果引入模块带有点号(.)
参考:https://github.com/openstack/oslo.utils/blob/master/oslo_utils/importutils.py
获取当前文件夹名称
|
|
获取cpu数
|
|
生成验证码
|
|
统计字符串每个单词出现的次数
|
|
记录字符串中所有字符出现的次数
|
|
本地时间转UTC时间
|
|
列表反转的几种方式
reverse方法
|
|
reversed方法
|
|
切片
|
|
列表推导式
|
|
字符串常用方法
join
将包含若干子串的列表分解,并肩这些子串合成一个完整的字符串,与split方法相反
startswith/endswith
字符串是否以某个子串开始/结束
find/rfind
子串在字符串中 第一次/最后一次 出现的索引
count
子串在字符串中出现的次数
isalnum
字符串中出现的都是字母或者数字吗
capitalize/title/upper/lower/swapcase
capitalize: 字符串第一个字母大写
title: 所有单词开头字母变成大写
upper: 所有字符都变成大写
lower: 所有字符都变成小写
swapcase: 将所有字符的大小写转换
replace
子串替换
列表的常用方法
append/extend/insert
append: 添加元素之尾部
extend: 合并两个列表
insert: 在执行索引位置插入元素
del/remove/pop
del: 删除指定索引位置的元素
remove: 删除具有指定值的元素
pop: 获取并删除指定位置的元素
in/index/count/join/sort/len
in: 判断特定值是否存在
index: 查询特定值的索引位置
count: 特定值在列表中出现的次数
join: 字符串方法,把列表转为字符串
sort: 排序(会改变原列表元素位置,使用sorted(lists) 则不会改变原列表,而是返回一个新的排好序的列表)
len: 获取列表长度
列表的复制
如果通过=把列表赋值给多个变量,改变其中任何一处都会造成其他变量对应的值也被修改。
我们可以通过:
- copy模块(注意深拷贝与浅拷贝的区别)
- list()函数
- 列表分片[:]
三种方式将一个列表的值复制到另一个新的列表中,使其与原来的列表互不影响
|
|
我们会发现他们的id不一样,不是指向的同一个列表,所以针对a、b、c、d的修改不会互相影响
字典常用方法
dict
可以使用dict()将包含双值子序列的序列转换成字典
OrderedDict() 按键排序
默认的字典中键的顺序是不可预知的。如果想要按照键的插入的顺序排列,可以使用OrderedDict()来按键排序
update
使用update()可以将一个字典的键值对复制到另一个字典中去, 如果键相同,则新的值会覆盖相应的值
del
是用del可以删除指定键的元素
clear
使用clear()会清空字典
in/has_key()
用于判断某一个键是否在一个字典中(has_key已经不推荐使用)
keys()/values()
使用keys()可以获得字典的所有键,使用values()可以获得字典的所有值
items()/iteritems()
使用items() 获取所有的键值对. 每一个键值对以元祖的形式返回
使用iteritems()返回的是迭代器, 当迭代很大的序列是此方法更好
字典根据键排序
根据键从小到大排序
集合
python中,集合就像舍弃了值,仅剩下键的字典一样。键与键之间不允许重复。集合与字典的键一样,是无序的。
创建集合
使用set()函数创建一个集合,或者使用大括号将一系列以逗号隔开的值包裹起来。
注意:如果使用大括号,而大括号里没有逗号分隔的值,则创建的是一个字典。
转换为集合
使用set()可以将已有列表、字符串、元祖或者字典的内容来创建字典,其中重复的值会被丢弃
集合合并
可以使用& 符号或者intersection()函数来获取两个集合的交集
可以使用|或者union()函数来获取集合的并集
可以使用-或者difference()获取两个集合的差集(出现在第一个集合但不出现在第二个集合)
可以使用^或者symmetric_difference()获得两个集合的异或集
可以使用<=或者issubset()判断一个集合是否是另外一个集合的子集(第一个集合的所有元素都出现在第二个集合中)
注意:>=或者issuperset() 与之相反
循环注意事项
while
while 循环后面跟else:
如果while循环正常结束(没有使用break跳出),程序将进入到可选的else段。正常情况我们找到满足条件的解后使用break跳出;
如果循环结束,没有找到匹配的解,则进入else部分的代码段:
for
for 循环后面跟else:
与while类似,用来判断for循环是否正常结束(没有调用break跳出), 否则会执行else段
推导式
列表推导式
|
|
字典推导式
|
|
集合推导式
生成器推导式(没有元祖推导式)
|
|
圆括号之间的是生成器推导式,而不是元祖推导式。
一个生成器只能运行一次。列表、集合、字符串和字典都存储在内存中,但是生成器仅在运行中产生之,不会被存下来,
所以不能重新使用或者备份一个生成器
生成器
生成器是用来创建python序列的一个对象,该对象通过连续调用next()方法生成一系列的结果。使用它可以地带庞大的序列,且不需要再内存中创建存储整个序列。
通常,生成器是为迭代器产生数据的。
next()调用使生成器函数一直运行,到下一条yield语句为止。此时next()将返回传递给yield的值,而且函数将暂时中止执行。
再次调用next()时,函数将继续执行yield之后的语句。此过程持续到函数返回为止。
我们通常不会手动调用next(), 而是会适用for循环:
协程
协程是通过将yield语句作为表达式(yield)的形式创建的。把yield语句作为表达式使用,出现在复制运算符的右边:
以这种方式使用yield语句的函数称为协程
要使用这个函数,首先要调用它,然后执行next()来到到第一条(yield)语句暂停执行,然后使用send()给它发送数据,例如:
由于上述函数在使用之前,需要先执行next(),很容易出错。因此可以通过装饰器的方式来自动完成首次next()的操作:
使用Counter()计数
|
|
函数most_common()以降序返回所有元素,或者如果给定一个数字,会返回该数字前的元素
双端队列(deque): 栈+队列
deque是一种双端队列,同时具有栈和队列的特征。它可以从序列的任何一端添加和删除项。从一个词的两端扫向中间,
判断是否为回文串。函数popleft()去掉最左边的项并返回该项,pop()去掉最右边的项并返回该项。从两边一直向中间扫描,
只要两端的字符匹配,一直弹出直到到达中间:
|
|
itertools迭代代码结构
chain()迭代单个对象
|
|
cycle() 无限迭代
|
|
accumulate() 计算累计的值
|
|
特殊方法
比较相关
| 方法名 | 使用 |
| eq(self, other) | self == other |
| ne(self, other) | self != other |
| lt(self, other) | self < other |
| gt(self, other) | self > other |
| le(self, other) | self <= other |
| ge(self, otehr) | self >= other |
数学相关
| 方法名 | 使用 |
| add(self, other) | self + other |
| sub(self, otehr) | self - other|
| mul(self, other) | self other |
| floordiv(self, other) | self // other |
| truediv(self, other) | self / other |
| mod(self, other) | self % other |
| pow(self, other) | self * other |
其他相关
| 方法名 | 使用 |
| str(self) | str(self) |
| repr(self) | repr(self)|
| len(self) | len(self) |