[编辑] 我不确定这是否对 codereview 更好,如果是,请迁移 :) 谢谢!
所以我们坐在这里,研究一个半学术问题。
给定一个start
,stop
和step
, 生成一个范围元组列表, 所以
gen_range(100, 140, 10)
会产生
[(100, 110), (110, 120), (120, 130), (130, 140)]
另外,考虑到它应该可以工作,比如说,以 100 的步长迭代 500M 整数,而不是永远。
我想出的实现如下:
def gen_range(start, stop, step):
llist = range(start, stop+step, step)
batch_list = []
if llist[-1] > stop:
llist[-1] = stop
for a, b in enumerate(llist[:-1]):
batch_list.append((llist[a], llist[a+1]))
print batch_list
gen_range(100000000,600000000,100)
但我不能停止认为它可以以一种更有效(也是代码长度方面)的方式来完成。有什么建议么?
[编辑]
我忘了指出一件事。如果范围边界不等于步长,即您有以下情况:
gen_range(100, 143, 10)
上限应该是 143,而不是 150,因为这里的一些答案会产生,由于range()
内部。