本节介绍python的一些高级特性
1.切片
数字字符均适用:
>>> L = range(100)
>>> L[:10:2]
[0, 2, 4, 6, 8]
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
range函数为内部函数,生成长度为n的自然list
头:尾:间隔
>>> L[-1]
99
>>> L[-3:]
[97, 98, 99]
字符串也可:
>>> 'ABCDEFGHIJ'[:3]
'ABC'
>>> 'ABCDEFGHIJ'[::2]
'ACEGI'
2.迭代
只要满足条件,什么数据类型都能迭代
条件:
>>> from collections import Iterable
>>> isinstance('abc', Iterable)
True
迭代dict:
>>> d = {'a':1, 'b':2, 'c':3}
>>> for key in d:
print key
a
c
b
>>> for value in d.itervalues():
print value
1
3
2
给list 加下标:
>>> 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.列表生成式
是python内置的简单却强大的用于创建list的生成式
基础用例:
>>> [x*x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
也能用于全排或显示dict的key与value:
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> d = {'x':'a', 'y':'b', 'z':'c'}
>>> for k, v in d.iteritems():
print k, '=', v
y = b
x = a
z = c
>>> [k + '=' + v for k, v in d.iteritems()]
['y=b', 'x=a', 'z=c']
>>> L = ['Hello', 'World', 'IBM', 18]
>>> [s.lower() for s in L if isinstance(s, str)]
['hello', 'world', 'ibm']
4.生成器
如果列表元素可以按照某种算法推算出来,就不必生成整个列表,而是通过循环的过程推出后续元素,节省空间。
python中可以变循环边计算的机制就是生成器---generator
将列表生成式的[]改成()就是创建generator的一种方法:
>>> g = (x*x for x in range(1, 11))
>>> g
<generator object <genexpr> at 0x00000000029C9EA0>
>>> g.next()
1
>>> for n in g:
print g
可以使用next()来调用。但不好用,一般使用迭代来调用:
>>> g = (x*x for x in range(1, 11))
>>> for n in g:
print n
1
4
9
16
25
36
49
64
81
100
创建generator的另一种方法是在函数定义中使用 yield 关键字:
>>> def fab(max):
n, a, b = 0, 0 ,1
while n < max:
yield b
a , b = b, a+b
n = n + 1
>>> fab(6)
<generator object fab at 0x00000000029C9EA0>
程序yield处,原是 return ,是裴波那切数列的生成方式