高级特性
切片
>>>L[0:3]
[‘Michael’, ‘Sarah’, ‘Tracy’]
迭代
只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:
>>> d = {‘a’: 1, ‘b’: 2, ‘c’: 3}
>>> for key in d:
… print(key)
…
a
c
b
>>> from collections import Iterable
>>> isinstance(‘abc’, Iterable) # str是否可迭代
True
>>> for i, value in enumerate([‘A’, ‘B’, ‘C’]):
… print(i, value)
…
0 A
1 B
2 C
列表生成式
即List Comprehensions
>>> 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]
range函数后面可以再添加if判断,删选出符合条件的数
>>> [m + n for m in ‘ABC’ for n in ‘XYZ’]
[‘AX’, ‘AY’, ‘AZ’, ‘BX’, ‘BY’, ‘BZ’, ‘CX’, ‘CY’, ‘CZ’]
生成器
a, b = b, a + b
相当于:
t = (b, a + b) # t是一个tuple
a = t[0]
b = t[1]
,正确的方法是使用for循环,因为generator也是可迭代对象:
>>> g = (x * x for x in range(10))
>>> for n in g:
… print(n)
… 0
1
4
9
16
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return ‘done’
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
迭代器
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter(‘abc’), Iterator)
True