30 个 Python 语言的特点技巧
1 介绍从我开始学习Python时我就决定维护一个经常使用的“窍门”列表。不论何时当我看到一段让我觉得“酷,这样也行!”的代码时(在一个例子中、在StackOverflow、在开源码软件中,等等),我会尝试它直到理解它,然后把它添加到列表中。这篇文章是清理过列表的一部分。如果你是一个有经验的Python程序员,尽管你可能已经知道一些,但你仍能发现一些你不知道的。如果你是一个正在学习Python的C、C++或Java程序员,或者刚开始学习编程,那么你会像我一样发现它们中的很多非常有用。 每个窍门或语言特性只能通过实例来验证,无需过多解释。虽然我已尽力使例子清晰,但它们中的一些仍会看起来有些复杂,这取决于你的熟悉程度。所以如果看过例子后还不清楚的话,标题能够提供足够的信息让你通过Google获取详细的内容。 |
|
列表按难度排序,常用的语言特征和技巧放在前面。 1.1 分拆 >>> a, b, c = 1, 2, 3 1.2 交换变量分拆 >>> a, b = 1, 2 1.3 拓展分拆 (Python 3下适用) >>> a, *b, c = [1, 2, 3, 4, 5] 1.4 负索引 >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1.5 列表切片 (a[start:end]) >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1.6 使用负索引的列表切片 >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1.7 带步进值的列表切片 (a[start:end:step]) >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1.8 负步进值得列表切片 >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1.9 列表切片赋值 >>> a = [1, 2, 3, 4, 5] 1.10 命名切片 (slice(start, end, step)) >>> a = [0, 1, 2, 3, 4, 5] 1.11 zip打包解包列表和倍数 >>> a = [1, 2, 3] 1.12 使用zip合并相邻的列表项 >>> a = [1, 2, 3, 4, 5, 6] >>> group_adjacent = lambda a, k: zip(*([iter(a)] * k)) >>> zip(a[::2], a[1::2]) >>> zip(a[::3], a[1::3], a[2::3]) >>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k))) 1.13 使用zip和iterators生成滑动窗口 (n -grams) >>> from itertools import islice 1.14 使用zip反转字典 >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 1.15 摊平列表: >>> a = [[1, 2], [3, 4], [5, 6]] >>> sum(a, []) >>> [x for l in a for x in l] >>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] >>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]] 注意: 根据Python的文档,itertools.chain.from_iterable是首选。 1.16 生成器表达式 >>> g = (x ** 2 for x in xrange(10)) 1.17 迭代字典 >>> m = {x: x ** 2 for x in range(5)} >>> m = {x: 'A' + str(x) for x in range(10)} 1.18 通过迭代字典反转字典 >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 1.19 命名序列 (collections.namedtuple) >>> Point = collections.namedtuple('Point', ['x', 'y']) 1.20 命名列表的继承: >>> class Point(collections.namedtuple('PointBase', ['x', 'y'])): 1.21 集合及集合操作 >>> A = {1, 2, 3, 3} 1.22 多重集及其操作 (collections.Counter) >>> A = collections.Counter([1, 2, 2]) 1.23 迭代中最常见的元素 (collections.Counter) >>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7]) 1.24 双端队列 (collections.deque) >>> Q = collections.deque() 1.25 有最大长度的双端队列 (collections.deque) >>> last_three = collections.deque(maxlen=3) 1.26 字典排序 (collections.OrderedDict) >>> m = dict((str(x), x) for x in range(10)) 1.27 缺省字典 (collections.defaultdict) >>> m = dict() 1.28 用缺省字典表示简单的树 >>> import json (到https://gist.github.com/hrldcpr/2012250查看详情) >>> import itertools, collections 1.30 最大最小元素 (heapq.nlargest和heapq.nsmallest) >>> a = [random.randint(0, 100) for __ in xrange(100)] 1.31 笛卡尔乘积 (itertools.product) >>> for p in itertools.product([1, 2, 3], [4, 5]): 1.32 组合的组合和置换 (itertools.combinations 和 itertools.combinations_with_replacement) >>> for c in itertools.combinations([1, 2, 3, 4, 5], 3): 1.33 排序 (itertools.permutations) >>> for p in itertools.permutations([1, 2, 3, 4]): 1.34 链接的迭代 (itertools.chain) >>> a = [1, 2, 3, 4] 1.35 按给定值分组行 (itertools.groupby) >>> from operator import itemgetter >>> print_data(data) >>> data.sort(key=itemgetter(-1)) |
http://www.oschina.net/translate/thirty-python-language-features-and-tricks-you-may-not-know
dd
30 个 Python 语言的特点技巧的更多相关文章
- 你可能不知道的 30 个 Python 语言的特点技巧
列表按难度排序,常用的语言特征和技巧放在前面. 1.1 分拆 >>> a, b, c = 1, 2, 3>>> a, b, c(1, 2, 3)> ...
- 你可能不知道的30个Python语言的特点技巧
1 介绍 从我开始学习Python时我就决定维护一个经常使用的“窍门”列表.不论何时当我看到一段让我觉得“酷,这样也行!”的代码时(在一个例子中.在StackOverflow.在开源码软件中,等等), ...
- 如何玩转Python? 一文总结30种Python的窍门和技巧
Python作为2019年必备语言之一,展现了不可替代作用.对于所有的数据科学工作者,如何提高使用Python的效率,这里,总结了30种Python的最佳实践.技巧和窍门.希望这些可以帮助大家在202 ...
- Python之几个技巧特点
今天偶然看到一篇文章<你可能不知道的30个Python语言的提点技巧>,虽然做python有几年了,但中间还是好多不知道或没想到,特在这里做下摘抄. 原文地址: http://soft.c ...
- 使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!
作者:Charlie Marsh 译者:豌豆花下猫@Python猫 英文:Using Mypy in production at Spring (https://notes.crmarsh.com/u ...
- Python语言防坑小技巧
Python语言防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值即定义 1>.运行以下代码会出现报错 #!/usr/bin/env python #_*_ ...
- [转] Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
- Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
- Python 语言基础
Python 语言基础 Python 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...
随机推荐
- 《A First Course in Probability》-chaper4-离散型随机变量-负二项分布
基于我们最为熟悉的离散型分布——二项分布,我们能够衍生出很多别的分布列,对于之前介绍过的几何分布,我们赋予其的含义是:某个事件成功的概率是p,在n次独立重复实验中恰好成功一次的概率是多少.顺着这层含义 ...
- git 绑定github
1.创建一个名为git文件夹 2.git init 3.ssh-keygen -t rsa -C "邮箱地址" 4.根据上一步当中默认的文件夹找到id_rsa.pub 复制其中的内 ...
- POJ 3384 Feng Shui 半平面交
题目大意:一个人很信"Feng Shui",他要在房间里放两个圆形的地毯. 这两个地毯之间可以重叠,可是不能折叠,也不能伸到房间的外面.求这两个地毯可以覆盖的最大范围.并输出这两个 ...
- strus2与spring3 mvc的差别
比较了一下strus2与spring3 mvc的差别: spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3mvc中,一个方法对应一个r ...
- 关于OS_PRIO_SELF的说明
在看ucosii 中关于删除任务的函数 OSTaskDel 时看到 if (prio == OS_PRIO_SELF) { /* See ...
- java.lang.Math中的基本方法
java.lang.Math类提供的方法都是static的,“静态引入 ”使得不必每次在调用类方法时都在方法前写上类名: import static java.lang.Mat ...
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦.所以,在实践中会用到很多工 ...
- Scala的一些语言特点
1. 所有的基本数据类型都是对象,比如数值1的所说的类是 scala.Int 2. 所有的运算符都是类成员方法,比如1+2调用1.+(2); 0 to 2 调用 0.to(2) 3. 数组的访问也是通 ...
- Canvas画椭圆的方法
虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生 oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...
- The following module was built either with optimizations enabled or witherout debug information
出现这个问题的原因是这个程式有做版控,服务器上的版本比本机版本小 解决方式为:删除服务器上的版控或者本机版本改成与服务器一致即可