如何将范围(n,n + 2000)划分为大小为j的块。 输出应该看起来像[0,500],[500,1000],[1000,1500],[1500,2000]。 但是如果范围(n,n + 7864),那么我们如何将它们分成大致相等的大小块。
尝试过的代码:
for a in range(1,500):
if (last<500):
last=a+500 list.append([a,last]);
a=last;
elif(last>500):
list.append([list[len(list)-2][1],last element])
答案 0 :(得分:4)
使用zip
直截了当:
def range_sequence(start, stop, step):
return zip(range(start, stop, step), range(start+step, stop+step, step))
结果:
In [4]: list(range_sequence(0, 2000, 500))
Out[4]: [(0, 500), (500, 1000), (1000, 1500), (1500, 2000)]
请注意,这可能包括最后的不需要的元素:
In [5]: list(range_sequence(0, 7864, 500))
Out[5]:
[(0, 500),
(500, 1000),
(1000, 1500),
(1500, 2000),
(2000, 2500),
(2500, 3000),
(3000, 3500),
(3500, 4000),
(4000, 4500),
(4500, 5000),
(5000, 5500),
(5500, 6000),
(6000, 6500),
(6500, 7000),
(7000, 7500),
(7500, 8000)]
(7500, 8000)
对可能不是您想要的。如果您只是想停留在(7000, 7500)
,则可以将stop+step
更改为stop
。
如果最后一对应该是(7500, 7864)
那么你必须做一些更复杂的事情:
def range_sequence(start, stop, step):
result = list(zip(range(start, stop, step), range(start+step, stop, step))
if (stop - start) % step != 0:
last_fst_elem = result[-1][-1] if result else start
result.append((last_fst_elem, stop))
return result
结果:
In [15]: range_sequence(0, 7864, 500)
Out[15]:
[(0, 500),
(500, 1000),
(1000, 1500),
(1500, 2000),
(2000, 2500),
(2500, 3000),
(3000, 3500),
(3500, 4000),
(4000, 4500),
(4500, 5000),
(5000, 5500),
(5500, 6000),
(6000, 6500),
(6500, 7000),
(7000, 7500),
(7500, 7864)]
答案 1 :(得分:1)
您可以使用生成器功能:
>>> import math
def solve(start, end, sep):
prev = start
for _ in xrange(int(math.ceil((end-start)/float(sep)))):
_next = prev + sep
yield [prev, min(_next, end)]
prev = _next
...
>>> list(solve(0, 7864, 500))
[[0, 500], [500, 1000], [1000, 1500], [1500, 2000], [2000, 2500], [2500, 3000], [3000, 3500], [3500, 4000], [4000, 4500], [4500, 5000], [5000, 5500], [5500, 6000], [6000, 6500], [6500, 7000], [7000, 7500], [7500, 7864]]
>>> list(solve(0, 2000, 500))
[[0, 500], [500, 1000], [1000, 1500], [1500, 2000]]
>>> list(solve(0, 1710, 500))
[[0, 500], [500, 1000], [1000, 1500], [1500, 1710]]