多起村干部被灭门案,需要反思了!

高铁打人者身份被曝光,人脉资源碾压普通人!却遇到了硬茬

OPPO芯片业务解散不一定是坏事

明确了!任期届满后,他不再寻求连任!

去泰国看了一场“成人秀”,画面尴尬到让人窒息.....

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

应当掌握的20个python小技巧 | 第9期

青衣极客 青衣极客 2020-01-04

      在开发python程序时常常会用到一些简单的小技巧,从而更加简洁的完成自己的任务。最近发现了一份英文版的整理笔记,原名《20 Python Snippets You Should Learn Today》,总结得很不错,这里就重新实现并转述一下。有更喜欢阅读英文版的朋友可以从链接(https://medium.com/better-programming/20-python-snippets-you-should-learn-today-8328e26ff124)进入。

1. 字符串倒序

      字符串倒序或许不太常用,但是列表倒序还是很常用的,其实际的语法就是切片。

print('Hello World'[::-1])

Output:

dlroW olleH

2. 标题首字母大写

      在一些语言处理类的任务中常常用到,要是自己实现恐怕就比较麻烦了,还是直接调用接口比较方便。

print('freedom forever, truth forever'.title())

Output:

Freedom Forever, Truth Forever

3. 各异字母

     去除重复的字母是处理文本时的常见操作,这里是借用了set元素的互异性这一特性实现的。

s = 'aabbccddeeff'print(''.join(set(s)))

Output:

fdacbe

4. n次重复

     将已有元素重复n次的操作常在新列表初始化时使用, 很多不熟悉这个特性的朋友初始化一个全零列表时真的会直接写若干个0,这实在是太低效也太不美观了。

print([1,2,3]*3)print('abc'*3)

Output:

[1, 2, 3, 1, 2, 3, 1, 2, 3]abcabcabc

5. 列表妙用

     表达式内部循环和分支大概是python的一大特色,对于处理简单的列表计算是非常有效率的书写方式。

print([x**2 for x in [1,2,3,4]])

Output:

[1, 4, 9, 16]

6. 数值互换

     数值互换当然是很简单的,只不过这里提供一种既方便又美观的写法。

a, b = 1, 2a, b = b, aprint('a={}, b={}'.format(a, b))

Output:

a=2, b=1

7. 字符串切分

     如果经常处理文本,特别是从日志文件中提取所需信息的时候,切分字符串非常管用。

print('hello world'.split())print('hello,world'.split(','))

Output:

['hello', 'world']['hello', 'world']

8. 拼接字符串列表

      如果有很多的字符串需要拼接成一个句子,这时当然可以使用一个循环来做,不过还有更简单的方式,那就是join方法。

print(','.join(['hello', 'world']))

Output:

hello,world

9. 回文字符串检查

      回文字符串似乎是个经久不衰的问题,这里可以使用字符串倒序来实现。

s = '12345678900987654321'print(s == s[::-1])

Output:

True

10. 列表元素频数

      统计列表元素的频数在统计分析中是经常用到,初学者可能会使用一个循环来进行统计,当然也是能够完成任务的,只是稍显业余。

from collections import Countera = ['a', 'a', 'b', 'c', 'c', 'c']print(Counter(a))print(Counter(a).most_common())

Output:

Counter({'c': 3, 'a': 2, 'b': 1})[('c', 3), ('a', 2), ('b', 1)]

11. 检查字符串组成

     使用统计频数的方法可以获得一个字符串中各个基本元素出现的频数,这在判断一些字符串的相似性方面提供了便利。

from collections import Countera, b, c = 'abcde', 'abced', 'abcda'print(Counter(a))print(Counter(a) == Counter(b))print(Counter(a) == Counter(c))

Output:

Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1})TrueFalse

12. 异常捕获

      异常捕获大概是python程序绕不开的问题,只要项目稍微大一点,几乎不可能不处理异常。

try: print(1/0)except ZeroDivisionError as e: print('error: divide zero')else: print('normal')finally: print('completely')

Output:

error: divide zerocompletely

13. 使用枚举遍历

      有时在遍历列表时需要同时获得元素索引和内容,这时enumerate就派上用场。很多初学者使用循环中累加的方式来计算索引当然也不是不行,只是enumerate显然是更加方便和专业的。

a = ['hello', 'world']for idx, value in enumerate(a): print('idx={}, value={}'.format(idx, value))

Output:

idx=0, value=helloidx=1, value=world

14. 查看对象大小

      python开发者或许并不是太关心对象所占内存的问题,一般够用就行。对于有些内存敏感的项目大概是需要查看一下,单位是字节。

import sysprint(sys.getsizeof(1))

Output:

28

15. 合并词典

      将多个词典合并这一个词典的需求也是有的,只是凡合并就可能产生冲突,对冲突的不同解决方式也就有不同的合并策略。如果开发者只想用最简单的替换策略的话,下面这种合并就是比较合适了。

dict1 = {1:'hello', 2:'world'}dict2 = {1:'today', 3:'is', 4:'lucky', 5:'day'}print({**dict1, **dict2})

Output:

{1: 'today', 2: 'world', 3: 'is', 4: 'lucky', 5: 'day'}

16. 计时

      我们常常需要统计一段代码的运行时间来评估该段代码的性能,内置的time模块可以满足这种需求。

import timestart = time.time()for i in range(1000): passprint('cost time {} secs'.format(time.time() - start))

Output:

cost time 0.00012421607971191406 secs

17. 多维列表压平

      将多维列表压平成一维列表是一种数据预处理的方法,有时会给数据处理带来很大的便利。如果是结构不太清晰的多维列表,建议采用iteration_utilities,如果是格式化的多维列表可以构成数组的话,使用numpy会更高效一点。不过这两者都是第三方库,需要安装。对于一些公司开发机所在内网可能无法访问外网,那就没办法,只能手写多重循环进行unpack了。

# numpy和iteration_utilities是需要安装的第三方库import numpy as npfrom iteration_utilities import deepflattena = [1,2, [3,4], [[5,6], [7,8], [[9], [10]]]]b = [[1,2], [3,4]]for i in deepflatten(a): print(i, end=',')print()print(np.array(b).flatten())

Output:

1,2,3,4,5,6,7,8,9,10,[1 2 3 4]

18. 列表随机采样

     对列表元素进行随机采用在一些机器学习的项目中可能会需要,实现起来倒也很简单。

import randomprint(random.sample([1,2,3,4,5,6], 3))

Output:

[6, 4, 2]

19. 整数数字化

       分离出一个整数的各个数位的数字,这种需求使用python来实现那是最好不过,但是也千万别用循环求余和整除来完成,毕竟python还有更优雅的实现方式。

print(list(map(int, str(1234567))))

Output:

[1, 2, 3, 4, 5, 6, 7]

20. 元素不重复性检查

     涉及的元素互异的操作基本就会联想到set这种数据结构,检查是否有重复元素自然也是用set更方便。

a = [1,2,3,4,5,6,2]print(len(a) == len(set(a)))

Output:

False

         到此,需要学会的20个python小技巧就介绍完毕。


欢迎对python和人工智能感兴趣的朋友加入微信群讨论和交流:



    文章有问题?点此查看未经处理的缓存