索引值迭代-enumerate

你想在迭代一个序列的同时跟踪正在被处理的元素索引?内置的enumerate() 函数可以很好的解决这个问题:

1 list_c = ['a', 'b', 'c']
2 for i, c in enumerate(list_c):
3     print(i, c)

为了按传统行号输出(行号从1 开始),你可以传递一个开始参数:

1 list_c = ['a', 'b', 'c']
2 for i, c in enumerate(list_c, 1):
3     print(i, c)

利用enumerate()函数,在你遍历文件时想在错误消息中使用行号定位时候非常有用:

 1 def parser_file(filename):
 2     with open(filename) as f:
 3         for line_no, line in enumerate(f):
 4             fields = line.split('=')
 5             try:
 6                 count = int(fields[0])
 7                 print(count)
 8             except ValueError as e:
 9                 print("line {0} parse error:[{1}]".format(line_no, e))
10 
11 
12 def main():
13     parser_file("test.txt")
14 
15 if __name__ == '__main__':
16     main()

enumerate() 函数返回的是一个enumerate 对象实例,它是一个迭代器,返回连续的包含一个计数和一个值的元组,元组中的值通过在传入序列上调用next() 返回

还有一点可能并不很重要,但是也值得注意,有时候当你在一个已经解压后的元组序列上使用enumerate() 函数时很容易调入陷阱。你得像下面正确的方式这样写:

t_list = [(1, 2), (3, 4), (5, 6)]

# Error!
for i, x, y in enumerate(t_list, 1):
    print("{0}:({1}, {2})".format(i, x, y))

# Correct!
for i, (x, y) in enumerate(t_list, 1):
    print("{0}:({1}, {2})".format(i, x, y)
原文地址:https://www.cnblogs.com/z-joshua/p/6495369.html