enumerate说明:
- enumerate()是python内置函数。
- 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
- enumerate多用于在for循环中得到计数
语法:
enumerate(sequence, start=0)
其中,sequence 可以为序列,如 list、set 等,也可以为一个 iterator 或者任何可以迭代的对象,
默认的 start 为 0,函数返回本质上为一个迭代器,可以使用 next() 方法获取下一个迭代元素。
需要提醒的是,对于字典的迭代循环, enumerate() 函数并不适合,虽然在使用上并不会提示错误,
但输出的结果与期望的大相径庭,这是因为字典默认被转换成了序列进行处理。
要获取迭代过程中字典的 key 和 value,应该使用 iteritems 方法。
源代码:
def enumerate(sequence, start=0): n = start for elem in sequence: yield n, elem n += 1
使用对比
获取序列迭代的索引和值
推荐使用函数 enumerate() ,主要是为了解决在循环中获取索引以及对应值的问题。
它具有一定的惰性(lazy),每次仅在需要的时候才会产生一个(index, item)对。
# 方法一:在每次循环中对索引变量进行自增 li = ['a', 'b', 'c', 'd'] index = 0 for i in li: print("index:", index, "element:", i) index += 1 # 方法二:使用 range() 和 len() 方法结合 li = ['a', 'b', 'c', 'd', 'e'] for i in range(len(li)): print("index:", i, "element:", li[i]) # 方法三:使用 while 循环,用 len() 获取循环次数 li = ['a', 'b', 'c', 'd', 'e'] index = 0 while index < len(li): print("index:", index, "element:", li[index]) index += 1 # 方法四:使用 zip() 方法 li = ['a', 'b', 'c', 'd', 'e'] for i, e in zip(range(len(li)), li): print("index:", i, "element:", e) # 方法五:使用 enumerate() 获取序列迭代的索引和值 li = ['a', 'b', 'c', 'd', 'e'] for i, e in enumerate(li): print("index:", i, "element:", e)