博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
30个有关Python的小技巧
阅读量:6239 次
发布时间:2019-06-22

本文共 14342 字,大约阅读时间需要 47 分钟。

从我开始学习python的时候,我就开始自己总结一个python小技巧的集合。后来当我什么时候在Stack Overflow

或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当时我会努力的自己尝试一下这段代码,直到我懂了它的整体思路以后,我就把这段代码加到我的集合里。这篇博客其实就是这个集合整理后一部分的公开亮相。如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发现一些你不知道的新技巧。而如果你之前是一个c,c++,java的程序员,同时在学习python,或者干脆就是一个刚刚学习编程的新手,那么你应该会看到很多特别有用能让你感到惊奇的实用技巧,就像我当初一样。

每一个技巧和语言用法都会在一个个实例中展示给大家,也不需要有其他的说明。我已经尽力把每个例子弄的通俗易懂,但是因为读者对python的熟悉程度不同,仍然可能难免有一些晦涩的地方。所以如果这些例子本身无法让你读懂,至少这个例子的标题在你后面去google搜索的时候会帮到你。

整个集合大概是按照难易程度排序,简单常见的在前面,比较少见的在最后。

1.1 拆箱

1.2 拆箱变量交换

1.3 扩展拆箱(只兼容python3)

1.4 负数索引

1.5 切割列表

1.6 负数索引切割列表

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> a[-4:-2][7, 8]

1.7指定步长切割列表

1.8 负数步长切割列表

1.9 列表切割赋值

>>> a = [1, 2, 3, 4, 5]>>> a[2:3] = [0, 0]>>> a[1, 2, 0, 0, 4, 5]>>> a[1:1] = [8, 9]>>> a[1, 8, 9, 2, 0, 0, 4, 5]>>> a[1:-1] = []>>> a[1, 5]

1.10 命名列表切割方式

>>> a = [0, 1, 2, 3, 4, 5]>>> LASTTHREE = slice(-3, None)>>> LASTTHREEslice(-3, None, None)>>> a[LASTTHREE][3, 4, 5]

1.11 列表以及迭代器的压缩和解压缩

>>> a = [1, 2, 3]>>> b = ['a', 'b', 'c']>>> z = zip(a, b)>>> z[(1, 'a'), (2, 'b'), (3, 'c')]>>> zip(*z)[(1, 2, 3), ('a', 'b', 'c')]

1.12 列表相邻元素压缩器

1.13 在列表中用压缩器和迭代器滑动取值窗口

>>> def n_grams(a, n):...     z = [iter(a[i:]) for i in range(n)]...     return zip(*z)...>>> a = [1, 2, 3, 4, 5, 6]>>> n_grams(a, 3)[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]>>> n_grams(a, 2)[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]>>> n_grams(a, 4)[(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]

  

1.14 用压缩器反转字典

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}>>> m.items()[('a', 1), ('c', 3), ('b', 2), ('d', 4)]>>> zip(m.values(), m.keys())[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]>>> mi = dict(zip(m.values(), m.keys()))>>> mi{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

1.15 列表展开

>>> a = [[1, 2], [3, 4], [5, 6]]>>> list(itertools.chain.from_iterable(a))[1, 2, 3, 4, 5, 6] >>> sum(a, [])[1, 2, 3, 4, 5, 6] >>> [x for l in a for x in l][1, 2, 3, 4, 5, 6] >>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]>>> [x for l1 in a for l2 in l1 for x in l2][1, 2, 3, 4, 5, 6, 7, 8] >>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]>>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]>>> flatten(a)[1, 2, 3, 4, 5, 6, 7, 8]

  

1.16 生成器表达式

1.17 字典推导

>>> m = {x: x ** 2 for x in range(5)}>>> m{0: 0, 1: 1, 2: 4, 3: 9, 4: 16} >>> m = {x: 'A' + str(x) for x in range(10)}>>> m{0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}

  

1.18 用字典推导反转字典

>>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}>>> m{'d': 4, 'a': 1, 'b': 2, 'c': 3}>>> {v: k for k, v in m.items()}{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

  

1.19 命名元组

>>> Point = collections.namedtuple('Point', ['x', 'y'])>>> p = Point(x=1.0, y=2.0)>>> pPoint(x=1.0, y=2.0)>>> p.x1.0>>> p.y2.0

 

1.20 继承命名元组

>>> class Point(collections.namedtuple('PointBase', ['x', 'y'])):...     __slots__ = ()...     def __add__(self, other):...             return Point(x=self.x + other.x, y=self.y + other.y)...>>> p = Point(x=1.0, y=2.0)>>> q = Point(x=2.0, y=3.0)>>> p + qPoint(x=3.0, y=5.0)

 

1.21 操作集合

1.22 操作多重集合

1.23 统计在可迭代器中最常出现的元素

1.24 两端都可操作的队列

1.25 有最大长度的双端队列

1.26 可排序词典

1.27 默认词典

1.28 默认字典的简单树状表达

1.29 对象到唯一计数的映射

1.30 最大和最小的几个列表元素

1.31 两个列表的笛卡尔积

1.32 列表组合和列表元素替代组合

1.33 列表元素排列组合

1.34 可链接迭代器

1.35 根据文件指定列类聚

转载于:https://www.cnblogs.com/Vito2008/p/4961630.html

你可能感兴趣的文章
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
马士兵教学语录
查看>>
计算机网络与Internet应用
查看>>
oracle在线迁移同步数据,数据库报错
查看>>
linux性能剖析工具
查看>>
flutter中的异步
查看>>
计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)
查看>>
error LNK2001: 无法解析的外部符号 __CrtDbgReport
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第七周学习总结
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>
邮件客户端导入邮件通讯录地址薄
查看>>
荆慕瑶
查看>>
EIGRP 查看邻居命令详解
查看>>
Linux启动的顺序说明
查看>>
Linux系统安装
查看>>
Oracle数据库的体系结构
查看>>
Cassandra监控 - OpsCenter手册
查看>>
rm: cannot remove `libtoolT': No such file or directory
查看>>
shell特殊符号cut命令,sort、wc、uniq命令,tee、tr、split命令
查看>>
Python第一天:Python擅长领域以及各种重点学习框架(包含Python在世界上的应用)...
查看>>