4.10 序列上索引值迭代

    内置的 函数可以很好的解决这个问题:

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

    1. >>> my_list = ['a', 'b', 'c']
    2. >>> for idx, val in enumerate(my_list, 1):
    3. ... print(idx, val)
    4. ...
    5. 2 b
    6. 3 c

    这种情况在你遍历文件时想在错误消息中使用行号定位时候非常有用:

    1. word_summary = defaultdict(list)
    2.  
    3. with open('myfile.txt', 'r') as f:
    4. lines = f.readlines()
    5.  
    6. # Create a list of words in current line
    7. words = [w.strip().lower() for w in line.split()]
    8. for word in words:
    9. word_summary[word].append(idx)

    如果你处理完文件后打印 word_summary ,会发现它是一个字典(准确来讲是一个 ),对于每个单词有一个 key ,每个 key 对应的值是一个由这个单词出现的行号组成的列表。如果某个单词在一行中出现过两次,那么这个行号也会出现两次,同时也可以作为文本的一个简单统计。

    当你想额外定义一个计数变量的时候,使用 enumerate() 函数会更加简单。你可能会像下面这样写代码:

    但是如果使用 函数来代替就显得更加优雅了:

    1. for lineno, line in enumerate(f):
    2. # Process line
    3. ...

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

    原文: