effective python

来源:互联网 发布:安卓壁纸软件 编辑:程序博客网 时间:2024/05/19 09:42

尽量用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 namecount 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);

考虑用生成器来改写直接返回列表地函数

直接返回列表,在列表数据量较小时还可以,当数据量较大时,将消耗大量的内存,

原创粉丝点击