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 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...
随机推荐
- 芭比娃娃 Barbara
芭比娃娃(芭比)是20世纪最广为人知及最畅销的玩偶,由Ruth Handler发明,于1959年3月9日举办的美国国际玩具展览会(American International Toy Fair)上首次 ...
- poj1611 并查集
题目链接:http://poj.org/problem?id=1611 #include <cstdio> #include <cmath> #include <algo ...
- __block的作用
__block 的标记告诉编译器,这个变量在 block 里面需要做特殊处理. 一般来说,在 block 中用的变量值是被复制过来的,所以对于变量本身的修改并不会影响这个变量的真实值.而当我们用 __ ...
- Linux命令 - 删除文件(夹)
1.删除文件夹 rm –rf /var/test 将会删除/var/test目录以及其下的所有文件.文件夹 2.删除文件 rm -f /var/test/test.txt 将会强制删除/var/tes ...
- DLL程序的创建步骤和測试程序
首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public: Test(void); ~Te ...
- iOS仿喜马拉雅FM做的毕业设计及总结(含新手福利源码)
其实仿喜马拉雅FM很早就开始了,从我刚接触iOS开始,就开始仿做了一部分,眼尖的人都从我的github找到了那个项目.随着找到实习iOS工作,仿写就落下了,但唯一的收获就是给过去打了一个响亮的耳光,因 ...
- 转载:C# HashSet 用法
原文地址:http://www.cnblogs.com/xiaopin/archive/2011/01/08/1930540.html 感谢博主分享! NET 3.5在System.Collect ...
- B/S系统间跨域单点登录设计思路
基于B/S系统间单点登录 此处说的单点登录的概念,即不同系统公用一个登录界面.一处系统通过登录验证,在接入的各系统均为登录状态.一般有两种情景: 1) 一级域名相同 例如:tieba.baidu.c ...
- (转)C#文件操作
原文连接:http://www.cnblogs.com/wangshenhe/archive/2012/05/09/2490438.html 文件与文件夹操作主要用到以下几个类: 1.File类: 提 ...
- updatepanel的属性
updatepanel的属性 1.childrenastriggers:内容模板内的子控件的回发是否更新本模板(和updatemode的conditional有关) 2.updatemode:内容模板 ...