第10条 enumerate 代替range & zip同时遍历两个迭代器

1.xrange代替range

一般情况下,需要产生一定范围内的数字时,会使用range函数

L = 100
for i in range(L):
    print(i)

但是,当L很大时,range(L)会首先生成一个大列表,需要消耗大量内存,影响性能。xrangerange用法相同,但是其返回的是object对象,不会一次性生成列表,通过for的迭代,逐个生成每个数字,类似于生成器。

L = 100
for i in xrange(L):
    print(i)

注意:Python 3.x已经去掉xrange,全部用range代替。

2. enumerate代替range

Python提供的enumerate函数可以同时获取元素的indexvalue.

array = [1,2,3,4,5]
for index, value in enumerate(array):
    print(index)
    print(value)

同时,可以给enumerate提供第二个参数,指定开始计数时所用的值(默认为0)

for index,value in enumerate(array,1): # 从1开始计数
    print(index)
    print(value)
3.zip同时遍历两个迭代器

在编写Python程序中,有时候会涉及到多个列表对象,与此同时,也会同时遍历多个有关联的对象。

可以使用zip平行地遍历多个迭代器

names = ['bob','john','lisa']
ages = [19,20,32]
for name,age in zip(names,ages):
    print("%s's age is %s"%(name,age))

zip机制:可以把两个或者两个以上的迭代器封装成生成器,在利用for遍历过程中,会从每个迭代器中获取该迭代器的下一个值,然后将这些值打包成tuple返回。

注意:当两个迭代器长度不一样时,只要有一个耗尽,那么zip将不再返回元组,提前终止。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值