是否有一个内置/现有的库函数类似于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)]
完整的解决方案如下:
[(s, (s+step-1 if s+step-1<stop-1 else stop-1)) for s in xrange(start,stop,step)]
使用 range 或 xrange,随你喜欢。
这(几乎)做你想要的:
[(s, s + step - 1) for s in range(start, stop, step)]
结果:
[(0, 4), (5, 9), (10, 14), (15, 19)]
您可以改进这一点并制作最后一对(15, 17)
。
这提供了一个与 with 一样的迭代器,xrange
也适用于一个negative 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)]