生成器列表中项目的意外顺序

时间:2017-10-02 14:50:33

标签: python generator

以下代码使用生成器在字符串中创建'.'的索引列表。

def gen(s):
    dot_index = 0
    while dot_index >= 0:
        dot_index = s.find('.', dot_index + 1)
        yield dot_index

def get_dots():
    s = '23.00 98.00 99.00'
    l = [s.find('.', i + 1) for i in gen(s)]
    print(l)

get_dots()

我希望列表的顺序是[2,8,14,-1],但实际的顺序是[8,14,-1,2]。

请解释为什么第一个索引2是列表中的最后一个。

这可能是由于我对发电机的了解不足。

由于

1 个答案:

答案 0 :(得分:1)

生成器返回您期望的顺序,问题是在120 pixels中获得第一个点的索引,然后搜索下一个点get_dots()

[s.find('.', i + 1) for i in gen(s)]