尽量用enumerate取代range
迭代列表时,如果还想知道元素在列表中的索引,一种方法是用range,
另一种就是enumerate:
for index,value in enumerate(lista):
print index,value;
enumerate可以把各种迭代器包装成生成器(generator),生成器每次产生一对输出值,下标和相应元素,和其他迭代器不同的是,其他的如list是直接把所有数据生成好,一次性地返回整个列表,就会占用较大地内存。
还可以直接指定enumerate函数开始计数时所用的值(如从1开始):
for index,value in enumerate(lista,1):
print index,value;
用zip函数同时遍历两个及以上迭代器
python3中的zip函数可以把两个或两个以上的迭代器封装成生成器。即如果想同时遍历多个迭代器时,可以使用zip:
for name,count in zip(list1,list2):
print(name,count)
当列表长度不同时,zip函数当其中一个列表迭代完后,就会停止。
用生成器表达式来改写数据量较大的列表推导
列表推导是放在[ ]中的,而生成器表达式放在()中,两者的区别在于,生成器表达式求值时会返回一个生成器,而不是立即求出所有的值,这样就不会占用太多内存。使用内置的next函数来输出下一个值。同时generator也可以像列表那样循环输出值,这里是隐式调用了next()。
it = (len(x) for x in list)
print(next(it))
##像列表一样使用
for i in it:
print(i);
考虑用生成器来改写直接返回列表地函数
直接返回列表,在列表数据量较小时还可以,当数据量较大时,将消耗大量的内存,