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]
添加回答
举报