Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python列表中映射字符串元素_Python_String_Python 3.x - Fatal编程技术网

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

在python列表中映射字符串元素,python,string,python-3.x,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'] 这就像一个版本控制逻辑。每增加一颗星的基值1,每增加一颗星的基值将是x.1,x.1.1,x.1.1..就像这样,每增加一颗星的计数,小数点将增加到第7个元素处。**转换为3.2 需要

我有一张这样的清单

ip = ['*', '*', '*', '**', '***', '****', '**', '*', '**', '*']
我需要像这样的输出:

op = ['1', '2', '3', '3.1', '3.1.1', '3.1.1.1', '3.2', '4', '4.1', '5']
这就像一个版本控制逻辑。每增加一颗星的基值1,每增加一颗星的基值将是x.1,x.1.1,x.1.1..就像这样,每增加一颗星的计数,小数点将增加到第7个元素处。**转换为3.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)))
这对你有用吗? 我这样做的前提是,我们总是以一个星号“*”开头,然后代码片段知道该做什么。基本上,我有一个星号数计数器,通过检查下一个元素是短还是长,可以将较小的部分设为空

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

对不起,这不是一个免费的编码服务。听起来像是一个有趣的练习,破坏它会是一种耻辱…同意,这是一个有趣的练习,我也在尝试解决它,但寻求帮助不是犯罪。是吗?它有效,谢谢,我正在尝试使用字典来解决它,将发布我的解决方案,非常感谢:我尝试了与你的答案相同的答案,我错过了ss=追加部分中的0和[:-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])