python实用技巧总结(一)

ε祈祈猫儿з 提交于 2020-03-07 09:24:44

一、在列表,字典,集合中根据条件筛选数据

 

  过滤负数(例)

    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'参数完成同样任务

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!