对于循环范围和间隔,如何包括最后一步

时间:2017-11-27 19:41:43

标签: python python-2.7

制作for循环的最佳方法是什么

 for i in range(0,99,20)

迭代i = 0 20 40 60 80 99?

而不仅仅是i = 0 20 40 60 80?

现在我有一个if语句来检查modulo!= 0是否正确,如果为真,则会额外迭代。

2 个答案:

答案 0 :(得分:2)

使用Python range无法做到这一点。但这可以通过创建你的生成器函数来实现。

def myRange(start,end,step):
    i = start
    while i < end:
        yield i
        i += step
    yield end


for i in myRange(0,99,20):
    print(i)

输出:

0
20
40
60
80
99

答案 1 :(得分:2)

首先,包含结束条件通常没有多大意义,范围的概念是执行跳跃直到达到最终值。

尽管如此,您可以使用itertools.chain作为:

from itertools import chain

for i in chain(range(0,99,20), [99]):
    # ...
    pass

chain将迭代连接在一起。因此,在range(..)用完之后,它将迭代下一个可迭代,依此类推。

上述方法不是很优雅:它需要一些关于chain如何工作的知识。然而,我们可以封装那个逻辑:

def range_with_end(start, stop, step):
    return chain(range(start, stop, step), (stop,))