我有一个类似
的列表ip = ['*', '*', '*', '**', '***', '****', '**', '*', '**', '*']
我需要像这样的输出:
op = ['1', '2', '3', '3.1', '3.1.1', '3.1.1.1', '3.2', '4', '4.1', '5']
这就像一个版本控制逻辑。每增加一个单星基准值,每个多颗恒星将分别为x.1,x.1.1,x.1.1.1.。这样,对于每一个相同的恒星计数,小数位将增加(请看第7个元素。 **转换为3.2)...
需要帮助以形成逻辑,即使我正在尝试这样做,也可以发布我的解决方案。
感谢Adv。
答案 0 :(得分:2)
您可以使用一堆计数器:
op = []
i = []
for l in ip:
while len(i) < len(l):
i.append(0)
while len(l) < len(i):
i.pop()
i[-1] += 1
op.append('.'.join(map(str, i)))
op
变为:
['1', '2', '3', '3.1', '3.1.1', '3.1.1.1', '3.2', '4', '4.1', '5']
答案 1 :(得分:1)
这对您有用吗? 我假设我们总是以一个星号“ *”开头,然后代码片段知道该怎么做。基本上,我有一个星号计数器,通过检查下一个元素是较短还是较长,可以使较小的部分为空。
ll=['*', '*', '*', '**', '***', '****', '**', '*', '**', '*']
sec=[0]*len(max(ll))
sec[0]=1
new=[]
new.append('1')
for (i,s) in zip(range(0,len(ll)-1),ll):
ls=len(s)
ls1=len(ll[i+1])
sec[ls1-1]=sec[ls1-1]+1
if ls1<ls:
sec[(ls1):]=[0]*len(sec[ls1:])
new.append(''.join(str(ss)+'.' for ss in sec if ss!=0)[:-1])