1、拆箱

>>> a, b, c = 123
>>> a, b, c
(123)
>>> a, b, c = [123]
>>> a, b, c
(123)
>>> a, b, c = (2 * + 1 for in range(3))
>>> a, b, c
(135)
>>> a, (b, c), d = [1, (23), 4]
>>> a
1
>>> b
2
>>> c
3
>>> d
4

2、使用拆箱进行变量交换

>>> a, b = 12
>>> a, b = b, a
>>> a, b
(21)

3、扩展的拆箱(Python 3支持)

>>> a, *b, c = [12345]
>>> a
1
>>> b
[234]
>>> c
5

4、负数索引

>>> a = [012345678910]
>>> a[-1]
10
>>> a[-3]
8

5、列表切片(a[start:end])

>>> a = [012345678910]
>>> a[2:8]
[234567]

6、负数索引的列表切片

>>> a = [012345678910]
>>> a[-4:-2]
[78]

7、带步数的列表切片(a[start:end:step])

>>> a = [012345678910]
>>> a[::2]
[0246810]
>>> a[::3]
[0369]
>>> a[2:8:2]
[246]

8、负数步数的列表切片

>>> a = [012345678910]
>>> a[::-1]
[109876543210]
>>> a[::-2]
[1086420]

9、列表切片赋值

>>> a = [12345]
>>> a[2:3= [00]
>>> a
[120045]
>>> a[1:1= [89]
>>> a
[18920045]
>>> a[1:-1= []
>>> a
[15]

10、切片命名(slice(start, end, step))

>>> a = [012345]
>>> LASTTHREE = slice(-3None)
>>> LASTTHREE
slice(-3NoneNone)
>>> a[LASTTHREE]
[345]

11、遍历列表索引和值(enumerate)

>>> a = ["Hello""world""!"]
>>> for i, x in enumerate(a):
... print "{}: {}".format(i, x)
...
0: Hello
1: world
2: !

12、遍历字典的KEY和VALUE(dict.iteritems)

>>> m = {"a"1"b"2"c"3"d"4}
>>> for k, v in m.iteritems():
... print "{}: {}".format(k, v)
...
a: 1
c: 3
b: 2
d: 4
 
# 注意:Python 3中要使用dict.items

13、压缩 & 解压列表和可遍历对象

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

14、使用zip分组相邻列表项

>>> a = [123456]
 
>>> # Using iterators
>>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))
>>> group_adjacent(a, 3)
[(123), (456)]
>>> group_adjacent(a, 2)
[(12), (34), (56)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]
 
 
>>> # Using slices
>>> from itertools import islice
>>> group_adjacent = lambda a, k: zip(*(islice(a, i, None, k) for in range(k)))
>>> group_adjacent(a, 3)
[(123), (456)]
>>> group_adjacent(a, 2)
[(12), (34), (56)]
>>> group_adjacent(a, 1)
[(1,), (2,), (3,), (4,), (5,), (6,)]

15、使用zip & iterators实现推拉窗(n-grams)

>>> from itertools import islice
>>> def n_grams(a, n):
... z = (islice(a, i, Nonefor in range(n))
... return zip(*z)
...
>>> a = [123456]
>>> n_grams(a, 3)
[(123), (234), (345), (456)]
>>> n_grams(a, 2)
[(12), (23), (34), (45), (56)]
>>> n_grams(a, 4)
[(1234), (2345), (3456)]

16、使用zip反相字典对象

>>> 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"}

17、合并列表

>>> a = [[12], [34], [56]]
>>> list(itertools.chain.from_iterable(a))
[123456]
 
>>> sum(a, [])
[123456]
 
>>> [x for in for in l]
[123456]
 
>>> a = [[[12], [34]], [[56], [78]]]
>>> [x for l1 in for l2 in l1 for in l2]
[12345678]
 
>>> a = [12, [34], [[56], [78]]]
>>> flatten = lambda x: [y for in for in flatten(l)] if type(x) is list else [x]
>>> flatten(a)
[12345678]
Note: according to Python"s documentation on sum, itertools.chain.from_iterable is the preferred method for this.

18、生成器

>>> g = (x ** 2 for in xrange(10))
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> sum(x ** 3 for in xrange(10))
2025
>>> sum(x ** 3 for in xrange(10if % 3 == 1)
408

19、字典解析

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

20、使用字典解析反相字典对象

>>> 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"}

21、命名的tuples(collections.namedtuple)

>>> Point = collections.namedtuple("Point", ["x""y"])
>>> p = Point(x=4.0, y=2.0)
>>> p
Point(x=4.0, y=2.0)
>>> p.x
4.0
>>> p.y
2.0

22、继承命名tuples

>>> 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=4.0, y=2.0)
>>> q = Point(x=2.0, y=3.0)
>>> p + q
Point(x=6.0, y=5.0)

23、Set & Set运算

>>> A = {1233}
>>> A
set([123])
>>> B = {34567}
>>> B
set([34567])
>>> A | B
set([1234567])
>>> A & B
set([3])
>>> A - B
set([12])
>>> B - A
set([4567])
>>> A ^ B
set([124567])
>>> (A ^ B) == ((A - B) | (B - A))
True

24、Multisets运算(collections.Counter)

>>> A = collections.Counter([122])
>>> B = collections.Counter([223])
>>> A
Counter({2211})
>>> B
Counter({2231})
>>> A | B
Counter({221131})
>>> A & B
Counter({22})
>>> A + B
Counter({241131})
>>> A - B
Counter({11})
>>> B - A
Counter({31})

25、列表中出现最多的元素(collections.Counter)

>>> A = collections.Counter([112233334567])
>>> A
Counter({34122241516171})
>>> A.most_common(1)
[(34)]
>>> A.most_common(3)
[(34), (12), (22)]

26、双向队列(collections.deque)

>>> Q = collections.deque()
>>> Q.append(1)
>>> Q.appendleft(2)
>>> Q.extend([34])
>>> Q.extendleft([56])
>>> Q
deque([652134])
>>> Q.pop()
4
>>> Q.popleft()
6
>>> Q
deque([5213])
>>> Q.rotate(3)
>>> Q
deque([2135])
>>> Q.rotate(-3)
>>> Q
deque([5213])

27、限制长度的双向队列(collections.deque)

>>> last_three = collections.deque(maxlen=3)
>>> for in xrange(10):
... last_three.append(i)
... print ", ".join(str(x) for in last_three)
...
0
01
012
123
234
345
456
567
678
789

28、排序字典(collections.OrderedDict)

>>> m = dict((str(x), x) for in range(10))
>>> print ", ".join(m.keys())
1032547698
>>> m = collections.OrderedDict((str(x), x) for in range(10))
>>> print ", ".join(m.keys())
0123456789
>>> m = collections.OrderedDict((str(x), x) for in range(100-1))
>>> print ", ".join(m.keys())
10987654321

29、默认字典(collections.defaultdict)

>>> m = dict()
>>> m["a"]
Traceback (most recent call last):
File "<stdin>", line 1in <module>
KeyError: "a"
>>>
>>> m = collections.defaultdict(int)
>>> m["a"]
0
>>> m["b"]
0
>>> m = collections.defaultdict(str)
>>> m["a"]
""
>>> m["b"+= "a"
>>> m["b"]
"a"
>>> m = collections.defaultdict(lambda"[default value]")
>>> m["a"]
"[default value]"
>>> m["b"]
"[default value]"

30、使用defaultdict代表tree

>>> import json
>>> tree = lambda: collections.defaultdict(tree)
>>> root = tree()
>>> root["menu"]["id"= "file"
>>> root["menu"]["value"= "File"
>>> root["menu"]["menuitems"]["new"]["value"= "New"
>>> root["menu"]["menuitems"]["new"]["onclick"= "new();"
>>> root["menu"]["menuitems"]["open"]["value"= "Open"
>>> root["menu"]["menuitems"]["open"]["onclick"= "open();"
>>> root["menu"]["menuitems"]["close"]["value"= "Close"
>>> root["menu"]["menuitems"]["close"]["onclick"= "close();"
>>> print json.dumps(root, sort_keys=True, indent=4, separators=(","": "))
{
"menu": {
"id""file",
"menuitems": {
"close": {
"onclick""close();",
"value""Close"
},
"new": {
"onclick""new();",
"value""New"
},
"open": {
"onclick""open();",
"value""Open"
}
},
"value""File"
}
}
 
# 查看更多:https://gist.github.com/hrldcpr/2012250

31、映射对象到唯一的计数数字(collections.defaultdict)

>>> import itertools, collections
>>> value_to_numeric_map = collections.defaultdict(itertools.count().next)
>>> value_to_numeric_map["a"]
0
>>> value_to_numeric_map["b"]
1
>>> value_to_numeric_map["c"]
2
>>> value_to_numeric_map["a"]
0
>>> value_to_numeric_map["b"]
1

32、最大 & 最小元素(heapq.nlargest and heapq.nsmallest)

>>> a = [random.randint(0100for __ in xrange(100)]
>>> heapq.nsmallest(5, a)
[33568]
>>> heapq.nlargest(5, a)
[100100999898]

33、笛卡尔积(itertools.product)

>>> for in itertools.product([123], [45]):
(14)
(15)
(24)
(25)
(34)
(35)
>>> for in itertools.product([01], repeat=4):
... print "".join(str(x) for in p)
...
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

34、组合(itertools.combinations and itertools.combinations_with_replacement)

>>> for in itertools.combinations([12345], 3):
... print "".join(str(x) for in c)
...
123
124
125
134
135
145
234
235
245
345
>>> for in itertools.combinations_with_replacement([123], 2):
... print "".join(str(x) for in c)
...
11
12
13
22
23
33

35、排列(itertools.permutations)

>>> for in itertools.permutations([1234]):
... print "".join(str(x) for in p)
...
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321

36、链接可遍历对象(itertools.chain)

>>> a = [1234]
>>> for in itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):
... print p
...
(12)
(13)
(14)
(23)
(24)
(34)
(123)
(124)
(134)
(234)
>>> for subset in itertools.chain.from_iterable(itertools.combinations(a, n) for in range(len(a) + 1))
... print subset
...
()
(1,)
(2,)
(3,)
(4,)
(12)
(13)
(14)
(23)
(24)
(34)
(123)
(124)
(134)
(234)
(1234)

37、根据给定的KEY分组(itertools.groupby)

>>> from operator import itemgetter
>>> import itertools
>>> with open("contactlenses.csv""r") as infile:
... data = [line.strip().split(","for line in infile]
...
>>> data = data[1:]
>>> def print_data(rows):
... print " ".join(" ".join("{: <16}".format(s) for in row) for row in rows)
...
 
>>> print_data(data)
young myope no reduced none
young myope no normal soft
young myope yes reduced none
young myope yes normal hard
young hypermetrope no reduced none
young hypermetrope no normal soft
young hypermetrope yes reduced none
young hypermetrope yes normal hard
pre-presbyopic myope no reduced none
pre-presbyopic myope no normal soft
pre-presbyopic myope yes reduced none
pre-presbyopic myope yes normal hard
pre-presbyopic hypermetrope no reduced none
pre-presbyopic hypermetrope no normal soft
pre-presbyopic hypermetrope yes reduced none
pre-presbyopic hypermetrope yes normal none
presbyopic myope no reduced none
presbyopic myope no normal none
presbyopic myope yes reduced none
presbyopic myope yes normal hard
presbyopic hypermetrope no reduced none
presbyopic hypermetrope no normal soft
presbyopic hypermetrope yes reduced none
presbyopic hypermetrope yes normal none
 
>>> data.sort(key=itemgetter(-1))
>>> for value, group in itertools.groupby(data, lambda r: r[-1]):
... print "-----------"
... print "Group: " + value
... print_data(group)
...
-----------
Group: hard
young myope yes normal hard
young hypermetrope yes normal hard
pre-presbyopic myope yes normal hard
presbyopic myope yes normal hard
-----------
Group: none
young myope no reduced none
young myope yes reduced none
young hypermetrope no reduced none
young hypermetrope yes reduced none
pre-presbyopic myope no reduced none
pre-presbyopic myope yes reduced none
pre-presbyopic hypermetrope no reduced none
pre-presbyopic hypermetrope yes reduced none
pre-presbyopic hypermetrope yes normal none
presbyopic myope no reduced none
presbyopic myope no normal none
presbyopic myope yes reduced none
presbyopic hypermetrope no reduced none
presbyopic hypermetrope yes reduced none
presbyopic hypermetrope yes normal none
-----------
Group: soft
young myope no normal soft
young hypermetrope no normal soft
pre-presbyopic myope no normal soft
pre-presbyopic hypermetrope no normal soft
presbyopic hypermetrope no normal soft

38、在任意目录启动HTTP服务

python -m SimpleHTTPServer 5000
Serving HTTP on 0.0.0.0 port 5000 ...

39、Python之禅

>>> import this
The Zen of Python, by Tim Peters
 
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren"t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you"re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it"s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let"s do more of those!

40、使用C风格的大括号代替Python缩进来表示作用域

>>> from __future__ import braces

40个你可能不知道的Python的特点和技巧的更多相关文章

  1. 你所不知道的15个Axure使用技巧

    你有用原型开发工具吗?如果有,那你用的是Axure还是别的? 从以前就喜欢使用Axure,主要是觉得它能清楚的表达设计的思路,还有交互的真实再现,能让看的人一目了然,昨天看了这篇博文,便更加确定Axu ...

  2. 你可能不知道的python

    1.如何循环获得下标,使用 enumerate ints = ['a','b','c','d','e','f'] for idx, val in enumerate(ints): print idx, ...

  3. 你所不知道的Python奇技淫巧

    有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...

  4. 不得不知道的Python字符串编码相关的知识

    开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII character 'ascii' codec can't encode characters in posi ...

  5. 转:11个实用但你可能不知道的Python程序库

    原文来自于:http://www.techug.com/11-python-libraries-you-might-not-know 目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它 ...

  6. 11个实用但你可能不知道的Python程序库

    目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它们.单单PyPi上就有超过47000个包列表. 现在,越来越多的数据科学家开始使用Python,虽然他们从pandas,scikit- ...

  7. 【转载】不得不知道的Python字符串编码相关的知识

    原文地址:http://www.cnblogs.com/Xjng/p/5093905.html 开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII charact ...

  8. 关于Python你不得不知道的Python语言特点

    首先什么是语言?什么是编程? 准确来说是:定义计算机程序的语言,用来向计算机发送指令 个人理解:   语言:是一种交流的工具或者方式.比如我们的汉语普通话.各地的方言.外语中的英语.俄语.日语等.我们 ...

  9. 你可能不知道的 Python 技巧

    英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz (https://martinheinz.dev) 译者 ...

随机推荐

  1. 6.5安装nagios

    最近因为,科研需要,接触上了Nagios,这里,我将安装笔记做个详解.为自己后续需要和博友们学习! VMware workstation 11 的下载 VMWare Workstation 11的安装 ...

  2. Java基础08 继承(转载)

    继承(inheritance)是面向对象的重要概念.继承是除组合(composition)之外,提高代码重复可用性(reusibility)的另一种重要方式.组合是重复调用对象的功能接口.继承可以重复 ...

  3. JavaScript 对大小写敏感。

    JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getElementbyID 是不同的. 同样,变 ...

  4. PHP中MVC的编程思想浅谈

    我相信这样的文章已经被写烂了,但是我今天还是愿意冒着风险把自己的经验与大家分享一下.纯属原创,我也没什么可保留,希望对新手有帮助,有说的什么不对的地方,欢迎大家伙吐槽. 什么是MVC? 简单的说就是将 ...

  5. ASP.NET MVC 使用dataTable(3)--更多选项参考

    ASP.NET MVC 使用dataTable(3)--更多选项参考 jQuery  dataTables 插件是一个优秀的表格插件,是后台工程师的福音!它提供了针对数据表格的排序.浏览器分页.服务器 ...

  6. Python简单分布式爬虫

    分布式爬虫采用主从模式.主从模式是指由一台主机作为控制节点,负责管理所有运行网络爬虫的主机(url管理器,数据存储器,控制调度器),爬虫只需要从控制节点哪里接收任务,并把新生成任务提交给控制节点.此次 ...

  7. jqGrid单元格编辑配置,事件及方法

    转自 http://blog.csdn.net/xueshijun666/article/details/18151055 // var ret = $("#in_store_list_de ...

  8. Ubuntu下安装phpMyAdmin

    首先添加必要的apt源 1 apt-get update 确保软件包列表是最新的 apt-get upgrade 更新软件包 安装phpMyAdmin apt-get install phpmyadm ...

  9. python学习【第十一篇】网络编程

    一.socket的简介 socket(简称:套接字)进程间通信的一种方式,它与其他进程间通信的一个主要不同是:能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通 ...

  10. Maven 手动把本地jar安装到本地仓库

    首先,你要安装的.jar包要下载下来放在电脑上面,然后maven已经配置好了,如下图: 然后,执行一下命令就可以了 mvn install:install-file -Dfile=path-to-fi ...