Python 迭代
1,迭代:重复做一件事
2,iterable(可迭代)对象
。支持每次返回自己所包含的一个成员的对象
。对象事先_iter_方法
1),序列类型,如:list,str,tuple
2) , 非序列类型,如:dict,file
3) , 用户自定义的一些包含了_iter_()或_getitem_()方法的类
3,迭代器(iterator)又称游标(cursor),它是程序设计的软甲设计模式,
是一种可在容器物件(container,如列表等)上实现元素遍历的接口。
。简单理解方式:对于一个集体中的每一个元素,想要执行遍历,
那么针对这个集体的迭代器定义了遍历集体中每一个元素的顺序或者方法。
4,迭代:重复做一件事
5,iterable (可迭代)对象
1),支持每次返回自己所包含的一个成员的对象
2),对象实现了__iter__方法
。序列类型,如:list ,str ,tuple(元组)
。非序列类型,如:dict , file
。用户指定的一些包含了__iter__()或__getitem__()方法的类
6,在Python中,迭代器是遵循迭代协议的对象
7,使用iter()可从任何序列对象中得到迭代器
8,若要实现迭代器,需要在类中定义next()方法(Python 3 中是__next__())
9, 要使得迭代器指向下一个元素,则使用成员函数next()
1),在Python 中,是函数next(),而非成员函数。
10,当没有元素时,则引发StopIteration异常。
11,for 循环开始时,会通过迭代协议传递给Iter()内置函数,
从而能够从可迭代对象中获得一个迭代器,返回的对象含有需要的next方法。
Python 列表解析是Python 迭代机制的一种应用,它常用于实现创建新的列表,
因此要放置[]中。
语法:
[expression for iter_var in iterable]
[expression for iter_var in iterable if cond_expr]
列表解析:根据已有列表,高效生成新列表的方式,就叫做列表解析
例如:
L1 = [1,2,3,4,5]
L2 = []
for i in L1:
l2.append(i**2)
例如:
L3 = [i**2 for i in L1 if i >= 3]
t1 = ['x','y','z']
t2 = [1,2,3,]
t3 = [(i,j) for i in l1 for j in l2]
print t3
[('x',1),('x',2),('x',3),('y',1)...]
生成器表达式:
1,生成器表达式并不真正创建数字列表,而是返回一个生成器对象,
此对象在每次计算出一个条目后,把这个条目"产生"(yield)出来
1),生成器表达式使用了"惰性计算"或称作"延迟求职"的机制
2,序列过长,并且每次只需要获取一个元素时,
应当考虑使用生成器表达式而不是列表解析。
3),生成器表达式于Python 2.4引入
3,语法
(expr for iter_var in iterable)
(expr for iter_var in iterable if cond_expr)
产生偏移和元素
1,enumerate
1),range可在非完备遍历中用于生成索引偏移,而非偏移处的元素
2),如果同时需要偏移索引和偏移元素,则可以使用enumerate()函数
3),此内置函数返回一个生成器对象