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