3 回答

TA貢獻1848條經驗 獲得超2個贊
你不需要循環。您可以通過對系列進行求和來直接計算組中的第一個數字:
start = 1 + (n * (n + 1)) // 2
如果您希望 n 從 開始,1而不是0需要從 n 中減去。
def group(n):
n -= 1
start = 1 + (n * (n + 1)) // 2
return list(range(start, start + n +1))
# try it on first 10 numbers:
for i in range(1, 10):
print(group(i))
這將打印:
[1]
[2, 3]
[4, 5, 6]
[7, 8, 9, 10]
[11, 12, 13, 14, 15]
[16, 17, 18, 19, 20, 21]
[22, 23, 24, 25, 26, 27, 28]
[29, 30, 31, 32, 33, 34, 35, 36]
[37, 38, 39, 40, 41, 42, 43, 44, 45]
join如果需要字符串,可以使用或類似的。

TA貢獻1878條經驗 獲得超4個贊
好吧,我想展示它背后的數學原理。讓我們計算行號 n 的最后一項的表達式。
1 | 2 | 3 | 4 | .....line numbers
--+------+---------+------------+------
1 | 2, 3 | 4, 5, 6 | 7, 8, 9, 10| .....values
對于 n=1 (即行號 1),last=1 所以 last(1) = 1。
現在讓我們說last(n)表示第 n 行的最后一個值,然后: -
last(n) = last(n-1) + n
例如,對于第 4 行,n=4,我們有
last(4) = last(3) + 4 = 6 + 4 因此,展開遞歸,我們有:-
last(n) = last(n-1) + n
= (last(n-2) + n-1) + n
= last(1) + 2 + 3 + ....+ n-1 + n
= 1 + 2 + 3 + ....+ n-1 + n
= n*(n+1)/2
Thus,
last(n) = n*(n+1)/2
由于第 n 行有 n 個值,因此我們可以從第 n 行開始:-
start(n) = last(n) - n + 1
OR
start(n) = n*(n-1)/2 + 1
或者,您也可以將 start(n) 設為:-
start(n) = start(n-1) + n-1
= start(n-2) + n-2 + n-1
= start(1) + 1 + 2 + 3 + ....+ n-2 + n-1
= 1 + (1 + 2 + 3 + ... + n-2 + n-1)
= 1 + (n-1)*n/2
start(n) = n*(n-1)/2 + 1
休息一下就可以循環運行了
loop from i=0 to i=n-1 :
print( start(n) + i )

TA貢獻1812條經驗 獲得超5個贊
def find_line(l):
starting_num = 1
res = []
for count in range (l):
starting_num += count
res = list(range(starting_num, starting_num+l))
return res
測試 l=5 的函數:
print(find_line(5))
[11, 12, 13, 14, 15]
添加回答
舉報