码迷,mamicode.com
首页 > 编程语言 > 详细

python高级特性

时间:2016-07-21 14:32:41      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

1 切片,取一个list或tuple的部分元素

>>> L = list(range(100))
>>> L
[0, 1, 2, 3, ..., 99]

取1到10
>>> L[0:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

或写做
>>> L[:10]

取后10个数
>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

前20个数
>>> L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

每五个数取一个
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

2 迭代。使用for来访问集合

>>> d = {a: 1, b: 2, c: 3}
>>> for key in d:
...     print(key)
...
a
c
b

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

>>> for ch in ABC:
...     print(ch)
...
A
B
C

下表循环

>>> for i, value in enumerate([A, B, C]):
...     print(i, value)
...
0 A
1 B
2 C

同时使用两个变量

>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
...     print(x, y)
...
1 1
2 4
3 9

3 列表生成式

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

 

>>> [m + n for m in ABC for n in XYZ]
[AX, AY, AZ, BX, BY, BZ, CX, CY, CZ]

列出当前目录下的所有文件和目录名

>>> import os # 导入os模块,模块的概念后面讲到
>>> [d for d in os.listdir(.)] # os.listdir可以列出文件和目录
[.emacs.d, .ssh, .Trash, Adlm, Applications, Desktop, Documents, Downloads, Library, Movies, Music, Pictures, Public, VirtualBox VMs, Workspace, XCode]

4 生成器 

如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

通过next获取g的下一个值

>>> next(g)
0

使用for替代next

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
... 
0
1
4
9
16
25
36
49
64
81

5 迭代器

我们已经知道,可以直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如list、tuple、dict、set、str等;

一类是generator,包括生成器和带yield的generator function。

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

可以使用isinstance()判断一个对象是否是Iterable对象:

>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance(abc, Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False

 

python高级特性

标签:

原文地址:http://www.cnblogs.com/wuyong09/p/5691305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!