Python 将整数划分为多个范围

Python 将整数划分为多个范围,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,假设我有一个整数n,我需要将它划分为k大小的范围,这样结果就是一个元组列表,如下所示: [(0, k - 1), (k, 2*k - 1), ...] 如何在python中优雅地实现这一点?这里我不是问如何对列表进行分区,而是问如何对整数进行分区,只获取列表中范围的起始索引和最后索引。范围函数采用第三步参数: >>> for i in range(0,15,3): >>> print(i) ... ... 0 3 6 9 12 您可以将其用作元组的

假设我有一个整数n,我需要将它划分为k大小的范围,这样结果就是一个元组列表,如下所示:

[(0, k - 1), (k, 2*k - 1), ...]
如何在python中优雅地实现这一点?这里我不是问如何对列表进行分区,而是问如何对整数进行分区,只获取列表中范围的起始索引和最后索引。

范围函数采用第三步参数:

>>> for i in range(0,15,3):
>>>     print(i)
...
... 0
3
6
9
12
您可以将其用作元组的底部,然后添加k或k-1以获得顶部

list_of_tuples = []
for i in range(0,n,k):
    list_of_tuples.append( tuple(i, i+k-1) )
如果您愿意,您可以通过理解将其倒置:

lot = [ (i,i+k) for i in range(0,n,k) ]
如果要将这些数字输入一个范围,不减去一是个好主意

>>> def gen_include_n(n, k):
...     a = zip(range(0, n + 1, k), range(k - 1, n + k, k))
...     a[-1] = (a[-1][0], min(n, a[-1][1]))
...     return a
...
>>> gen_include_n(10,1)
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)]
>>> gen_include_n(10,2)
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9), (10, 10)]
>>> gen_include_n(10,6)
[(0, 5), (6, 10)]
>>> gen_include_n(10,10)
[(0, 9), (10, 10)]
>>> gen_include_n(10,11)
[(0, 10)]

>>> def gen_exclude_n(n, k):
...     a = zip(range(0, n, k), range(k - 1, n + k - 1, k))
...     a[-1] = (a[-1][0], min(n - 1, a[-1][1]))
...     return a
...
>>> gen_exclude_n(10,1)
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
>>> gen_exclude_n(10,2)
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
>>> gen_exclude_n(10,6)
[(0, 5), (6, 9)]
>>> gen_exclude_n(10,10)
[(0, 9)]
>>> gen_exclude_n(10,11)
[(0, 9)]