li = ['a', 'b', 'c ','d', 'e']
index=0
for i in li:
print ("index:",index,"element:",i)
index+=1
index: 0 element: a index: 1 element: b index: 2 element: c index: 3 element: d index: 4 element: e
li = ['a', 'b', 'c ','d', 'e']
for i in range(len(li)):
print ("index: ",i,"element:",li [i])
index: 0 element: a index: 1 element: b index: 2 element: c index: 3 element: d index: 4 element: e
li = ['a', 'b', 'c ','d', 'e']
index=0
while index < len(li) :
print ("index:", index, "element:",li[index] )
index+=1
index: 0 element: a index: 1 element: b index: 2 element: c index: 3 element: d index: 4 element: e
li = ['a', 'b', 'c ','d', 'e']
for i, e in zip(range (len (li)) , li):
print( "index: ",i, "element:",e)
index: 0 element: a index: 1 element: b index: 2 element: c index: 3 element: d index: 4 element: e
li = ['a', 'b', 'c ','d', 'e']
for i, e in enumerate (li):
print ("index:",i,"element:",e)
index: 0 element: a index: 1 element: b index: 2 element: c index: 3 element: d index: 4 element: e
这里推荐的是使用方法五,因为它代码清晰简洁,可读性最好。
函数 enumerate()
是在 Python 2.3 中引入的,主要是为了解决在循环中获取索引以及对应值的问题。
它具有一定的惰性(lazy),每次仅在需要的时候才会产生一个 (index,item)
。
对其函数签名如下:
enumerate (sequence, start=0)
其中, sequence
可以为序列,如 list
、 set
等。
也可以为一个 iterato
或者任何可以迭代的对象,默认的 start
为0 ,
函数数返回本质上为一个迭代器,可以使用 next()
方法获取下一个迭代元素,如下所示:
li = ['a', 'b', 'c ','d', 'e']
print (enumerate(li))
<enumerate object at 0x7f4600d4f9c0>
enumerate()
函数的内部实现非常简单, enumerate(sequence,start=0)
实际相当于如下代码:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n,elem
n += 1
因此利用这个特性用户还可以实现自己的 enumerate()
函数。
比如, myenumerate()
以反序的方式获取序列的索引和值。
def myenumerate(sequence):
n = -1
for elem in reversed(sequence):
yield len(sequence)+n, elem
n =n-1
li = ['a', 'b', 'c ','d', 'e']
for i,e in myenumerate(li):
print ("index: ", i, "element:", e)
index: 4 element: e index: 3 element: d index: 2 element: c index: 1 element: b index: 0 element: a
需要提醒的是,对于字典的迭代循环, emumerate()
函数并不适合,虽然在使用上并不会提示错误,
但输出的结果与期望的大相径庭,这是因为字典默认被转换成了序列进行处理。
personinfo = {'name ' : ' Jon', 'age' :'20', 'hobby' : ' football' }
for k, v in enumerate(personinfo):
print (k,v)
0 name 1 age 2 hobby
要获取迭代过程中字典的 key
和 value
,应该使用如下 iteritems()
方法。
但应该使用如下 iteritems
在python3报错,将 iteritems
改为 items
即可。
iteritems
是为python2环境中 dict
的函数:
for k, v in personinfo.items():
print (k,":",v)
name : Jon age : 20 hobby : football