是否存在类似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)]
答案 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)]