effective python

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值