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 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...
随机推荐
- [Locked] Smallest Rectangle Enclosing Black Pixels
An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. The black ...
- hdu4666 最远曼哈顿距离
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4666 #include <cstdio> #include <cstring> ...
- windows server作为文件服务器如何精细控制权限
最近使用windows server 2003搭建了文件服务器,对于其中关于共享文件权限的精细控制有了较深的体会. 当前实现基本的共享文件目录结构是(上传图片真心费劲,大家将就一下吧): |--部门1 ...
- 说说CSS学习中的瓶颈
虽已数年,但未就学习专门写过文章,这回破处了.苍蝇不叮没有缝隙的鸡蛋,领导不做没有跟拍的表演,同样,想到写CSS学习的文章也是有原因的(虽然我的不少行为没有原因). 情景再现(尊重隐私,下面故事中人名 ...
- Android 网络框架--Retrofit
1.导入Jar包 compile 'com.google.code.gson:gson:2.8.0' compile 'com.squareup.retrofit2:retrofit:2.1.0' c ...
- strus2与spring3 mvc的差别
比较了一下strus2与spring3 mvc的差别: spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3mvc中,一个方法对应一个r ...
- 一种解决的方法:CGContextSaveGState: invalid context 0x0
遇到这个问题找了好久答案,最后排错排出来了 CGContextSaveGState: invalid context 0x0. This is a serious error. This applic ...
- iOS应用内支付(内购)的个人开发过程及坑!
本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助. 本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统. 部 ...
- JDK5-枚举
1. 使用普通类模拟枚举 public class Weekday { private Weekday() {} // 私有化 public static final Weekday MONDAY = ...
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...