如何在Python中填充间隔?

qea 发布于 2019-08-14 python 最后更新 2019-08-14 08:39 2 浏览

是否有像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)]
已邀请:

et_est

赞同来自:

这(几乎)做你想要的:

[(s, s + step - 1) for s in range(start, stop, step)]
结果:
[(0, 4), (5, 9), (10, 14), (15, 19)]
你可以改进这个最后一对(15, 17)

eet

赞同来自:

这给出了与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)]

xid

赞同来自:

完整的解决方案看起来像:

[(s, (s+step-1 if s+step-1<stop-1 else stop-1)) for s in xrange(start,stop,step)]
使用范围或xrange,无论你喜欢什么。