在python列表中映射字符串元素

时间:2018-11-15 06:10:46

标签: python string python-3.x

我有一个类似

的列表
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。

2 个答案:

答案 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])