这里是 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...它们之间的差异nth em> 和 n-1th 在 AP 1,2,3,4,5...。
要得到分区的数量,你必须解这个方程。
=>(n*(n+1))/2=len(string)
=>n^2+n-2*len(string)=0
使用math.ceil(n) 获取n 的ceil 值将给我们这里的分区数,当字符串的长度为23 时,它是7。
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']