iter、enumerate
共同点:都可以可以用来访问可迭代对象
区别:前者访问迭代对象时只返回元素,后者除了元素还会返回索引,或者叫做访问顺序。
iter
lis=[4,3,2,8]
for data in iter(lis):
print("{}".format(data))
enumerate
lis=[4,3,2,8]
for index,data in enumerate(lis):
print("第{}个数是:{}".format(index,data))
iter、next
其中iter(lis)
是一个迭代器。前面的for in
关键字会使得每次取一个迭代器中的元素出来,并且取完。
但是使用next
不需要取完,而是只取一个元素,并且每取完一次,迭代器的指针会后移一位。所以next
更加灵活,不过如果要遍历迭代器的每个元素,那么需要自己写循环。
lis=[4,3,2,8]
it=iter(lis)
nex=next(it)
while True:
print(nex)
nex=next(it,-1)
if nex == -1:
break
其中-1是默认值,当取完最后一个元素,又来取的时候,迭代器会返回-1,从而不会报错。如果不写-1,没有元素却来取,会报错。
我估计for in
其实就是用next
实现的。
注意,迭代对象是更加通用的,列表类型只是其中一种。迭代器没有len()
方法,从而好像也没法索引来取元素,只能一步步next()
。