0
假設我有一個整數n
,我需要把它劃分成k
尺度的範圍這樣的結果是這樣的元組的列表:分區整數爲範圍
[(0, k - 1), (k, 2*k - 1), ...]
我怎樣才能做到這一點的優雅python?我是而不是問如何在這裏對列表進行分區,我在問如何對整數進行分區,並且只獲取列表中範圍的開始和結束索引。
假設我有一個整數n
,我需要把它劃分成k
尺度的範圍這樣的結果是這樣的元組的列表:分區整數爲範圍
[(0, k - 1), (k, 2*k - 1), ...]
我怎樣才能做到這一點的優雅python?我是而不是問如何在這裏對列表進行分區,我在問如何對整數進行分區,並且只獲取列表中範圍的開始和結束索引。
的range()
函數接受第三step
參數:
>>> 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) ]
(未減去一個是,如果你要這些數字送入一個range()
一個好主意。)
>>> 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)]