Вот python версия генератора.
def gen(a):
start=0
step=1
while a[start:start+step]:
yield a[start:start+step]
start+=step
step+=1
list(gen('mymedicinesarerighthere'))
# ['m', 'ym', 'edi', 'cine', 'sarer', 'ighthe', 're']
Вот другой подход.
Вы можете заметить, что стартовые индексы каждого среза равны 0,1, 3,6,10 ... их разница между n th и n-1th в AP 1,2,3, 4,5 ... .
Чтобы получить число разделов, вы должны решить это уравнение.
<b>=>(n*(n+1))/2=len(string)</b>
<b>=>n^2+n-2*len(string)=0</b>
Примите значение ceil для n
, используя math.ceil(n)
даст нам количество разделов здесь это 7, когда длина строки равна 23.
import math
def start(n):
return n*(n+1)//2
def findRoots(c):
a=b=1
d = b * b - 4 * a * c
sqrt_val = math.sqrt(abs(d))
return math.ceil((-b + sqrt_val)/(2 * a))
out=[s[start(i-1):start(i-1)+i] for i in range(1,findRoots(-2*len(s))+1)]
# ['m', 'ym', 'edi', 'cine', 'sarer', 'ighthe', 're']