如何在Python中填充间隔?

时间:2016-02-16 10:13:05

标签: python xrange

是否存在类似xrange的内置/现有库函数,但将间隔拆分为均匀间隔的非重叠块?

例如,如果我们调用此函数xchunks,那么我想:

>>> xchunks(start=0, stop=18, step=5)
[(0, 4), (5, 9), (10, 14), (15, 17)]

理想情况下,这也适用于否定step

>>> xchunks(start=20, stop=2, step=5)
[(20, 16), (15, 11), (10, 6), (5, 3)]

3 个答案:

答案 0 :(得分:2)

对此的完整解决方案如下:

[(s, (s+step-1 if s+step-1<stop-1 else stop-1)) for s in xrange(start,stop,step)]

使用范围或xrange,无论你喜欢什么。

答案 1 :(得分:0)

这(几乎)做你想做的事:

[(s, s + step - 1) for s in range(start, stop, step)]

结果:

[(0, 4), (5, 9), (10, 14), (15, 19)]

您可以改进这一点,最后一对(15, 17)

答案 2 :(得分:0)

这给出了xrange的迭代器,也可以使用负step。如果您使用的是Python 3.x,请将xrange替换为range

def xchunks(start, stop, step):
    return ((i, min(i + step - 1, stop - 1)) if step > 0 else
            (i, max(i + step + 1, stop + 1))
            for i in xrange(start, stop, step))


def test():
    result = list(xchunks(start=0, stop=18, step=5))
    print list(result)
    assert result == [(0, 4), (5, 9), (10, 14), (15, 17)]

    result = list(xchunks(start=20, stop=2, step=-5))
    print list(result)
    assert result == [(20, 16), (15, 11), (10, 6), (5, 3)]