1.xrange代替range
一般情况下,需要产生一定范围内的数字时,会使用range
函数
L = 100
for i in range(L):
print(i)
但是,当L
很大时,range(L)
会首先生成一个大列表,需要消耗大量内存,影响性能。xrange
同range
用法相同,但是其返回的是object
对象,不会一次性生成列表,通过for
的迭代,逐个生成每个数字,类似于生成器。
L = 100
for i in xrange(L):
print(i)
注意:Python 3.x已经去掉
xrange
,全部用range
代替。
2. enumerate代替range
Python提供的enumerate
函数可以同时获取元素的index
和value.
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
将不再返回元组,提前终止。