python实用技巧总结(一)
一、在列表,字典,集合中根据条件筛选数据
过滤负数(例)
filter函数
列表List(filter(lambda x:x>=0,data))
字典dict(filter(lambda item:item[1]>=0,data.items()))
集合set(filter(lambda x:x>=0,data))
生成式(推荐)
列表[x for x in data if x>=0]
字典{k:v for k,v in data.items if v>=0}
集合{x for x in data if x>=0}
二、为元组中每个元素(索引)命名,提高元素可读性
方法一:使用枚举类型代替索引
>>> from enum import IntEnum
>>> class StudentEnum(IntEnum):
NAME=0
AGE=1
SEX=2
EMAIL=3
方法二:为元组中的索引定义常量
NAME=0
AGE=1
SEX=2
EMAIL=3
方法三:collections.namedtuple(推荐)
>>> from collections import namedtuple
>>> Student = namedtuple('Student',['name','age','sex'])
>>> s=Student('zcy',12,1)
>>> s[0]
'zcy'
>>> s[1]
12
>>> s[2]
1
>>> s.name
'zcy'
三、根据字典的值对字典中键值对进行排序
将字典中的各项转换为元组,使用内置函数sorted()进行排序
方案1:将字典中的项转化为(值,键)元组,然后使用sorted函数
方案2:传递sorted函数的key参数
四、统计序列中元素的频度并排序
方法一:将序列转换为字典{元素:频度},对字典根据值排序
>>> data=[randint(0,20) for _ in range(10)]
>>> data
[16, 16, 15, 16, 18, 6, 8, 19, 5, 20]
>>> dft={k:0 for k in data}
>>> dft
{16: 0, 15: 0, 18: 0, 6: 0, 8: 0, 19: 0, 5: 0, 20: 0}
for x in data:
dft[x]+=1
>>> sorted([(v,k) for k,v in dft.items()],reverse=True)
[(3, 16), (1, 20), (1, 19), (1, 18), (1, 15), (1, 8), (1, 6), (1, 5)]
方法二:标准库collections.Counter对象
c=Counter(data)
>>> c
Counter({16: 3, 15: 1, 18: 1, 6: 1, 8: 1, 19: 1, 5: 1, 20: 1})
>>> c.most_common()
[(16, 3), (15, 1), (18, 1), (6, 1), (8, 1), (19, 1), (5, 1), (20, 1)]
五、快速找到多个字典的公共键
方法一:集合(set)交集(&)操作
>>> common_keys=set(d1.keys())&set(d2.keys())&set(d3.keys())
>>> common_keys
{'f', 'd'}
方法二:map和reduce
方法三:列表解析式(传统for循环)
>>> common_keys=[k for k in d1.keys() if k in d2.keys()and k in d3.keys()]
>>> common_keys
['d', 'f']
六、保持字典有序
解决方法:collection.OrderedDict
Python3.6开始dict已经是有序字典
>>> from collections import OrderedDict
>>> od=OrderedDict()
>>> od[1]='a'
>>> od[2]='b'
>>> od[3]='c'
>>> od.keys()
odict_keys([1, 2, 3])
>>> list(od.keys())
[1, 2, 3]
七、实现用户历史记录功能
方法:队列
使用标准库collections中的deque,是一个双端循环队列
>>> q=deque([],5)
>>> q.append(1)
>>> q.append(2)
>>> q.pop()
2
>>> q.append(2)
>>> q.append(3)
>>> q.popleft()
1
使用pickle模块将历史记录存储到硬盘
>>> import pickle
>>> pickle.dump(q,文件对象)
八、拆分多种分隔符的字符串
方法一:多次使用字符串的split方法
方法二:re模块的split方法(推荐,可一次处理多个分隔符)
九、判断字符串是否以特定字符串结尾
方法一:str.endswith()
十、调整字符串中文本的格式
re.sub(p,r,s)
p:以正则表达式表达的目标格式
r:以正则表达式表示的被替换部分
s:要修改的字符串
十一、字符串拼接
方法一:迭代列表,连续使用‘+’操作依次拼接每一个字符串(少量字符串拼接)
方法二:使用str.join()方法,更加快速的拼接列表所有字符串。(大量字符串推荐推荐)
十二、对字符串进行左、右、居中对齐
方法一:字符串的str.ljust (),str.rjust(),str.center()进行左对齐,右对齐,居中操作,第一个参数为总的长度,第二个参数(可选)为用来填充的符号
>>> s='abc'
>>> t=s.ljust(10,'*')
>>> t
'abc*******'
>>> p=s.ljust(10)
>>> p
'abc '
方法二:使用format()方法,传递类似'<20','>20','^20'参数完成同样任务