python的迭代相当的强大,也非常的好用。
迭代:
简单迭代:
最常见的迭代也就是for循环了
for i in range(10)
print i
它可以遍历列表,元组,字典
并行迭代:
names = ['anna', 'beth', 'tom']
ages = ['19', '24', '27']
for name,age in zip(names,ages)
print name,' is ',age,' years old!'
列表推导式:
列表推导式是用列表创建新列表
比如:
[ x*x for x in range(4)] #[0, 1, 4, 9]
[ x*x for x in range(4) if x%3 == 0] #[0, 9, 36, 81]
[ (x,y) for x in range(2) for y in range(2)] #[(0,0), (0,1), (1,0), (1,1)]
迭代器:
迭代器,实现__iter__特殊方法是可迭代,实现了next则是迭代器,不只在元组和字典中,而且更优雅,更推荐
class fibs:
def __init__(self):
self.a = 1
self.b = 1
def next(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 27000:raise StopIteration #------------从迭代器中得到序列
return self.a
def __iter__(self):
return self
if __name__ == '__main__':
fibs = fibs()
for f in fibs:
print f
fList = list(fibs) #使用list将迭代器转化为列表
print fList
#对于内建的iter函数,可以从对象中获取元素,实例
it = iter([5, 6, 1, 2, 9])
print it.next()
print it.next()
生成器:
任何包含yield语句的函数被称为生成器,它不像return那样返回值,而是每次产生多个值,每次产生一个值,函数就会被冻结:即函数停在那点等待被激活,函数被激活后就从停止的那点开始执行。(类似中断)
看实例:
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element
nested = [[3, 4], [1, 5], [2]]
for num in flatten(nested):
print num # 输出 3 4 1 5 2
递归生成器:
def flatten(nested):
try:
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield mested
nested = [[3, [7, [4,[8]]]], [1, 5], [2]]
for num in flatten(nested):
print num # 输出 3 7 4 8 1 5 2