weixin_41551439 2021-06-16 11:58 采纳率: 100%
浏览 23
已采纳

Python问题请教下,不知道列表中非顺序的循环输出方式如何写

['1@a', '11@aa', '111@aaa', '112@aab', '12@ab', '121@aba', '122@abb', '1221@abba', '1222@abbb', '123@abc', '1231@abca', '2@b', '21@ba']
输出的原则从一位数到多位数依次输出,如果下一层有两个及以上的,就输出两个,如果下一层就1个,那么连带下下层一起输出。
输出的结果为:
1 a
2 b
-----
1 a
11 aa
12 ab
-----
11 aa
111 aaa
112 aab
-----
12 ab
121 aba
122 abb
123 abc
-----
12-122 ab-abb
1221 abba
1222 abbb
-----
12-123 ab-abc
1231 abca
12311 abcaa
12312 abcab
12313 abcac
-----
2 b
21 ba

  • 写回答

2条回答 默认 最新

  • CSDN专家-文盲老顾 2021-06-16 13:52
    关注
    import re
    s = ['1@a', '11@aa', '111@aaa', '112@aab', '12@ab', '121@aba', '122@abb', '1221@abba', '1222@abbb', '123@abc', '1231@abca', '2@b', '21@ba']
    def pp(s,lv,p=''):
        o = ''
        n = []
        node = ''
        e = False
        if len(p)>0:
            x = p.split('@')
            o += x[0] + ' ' + x[1] + '\n'
            node = x[0]
        for i in s:
            x = i.split('@')
            if (len(x[0])==lv):
                t = False
                if node!='':
                    if x[0][0:lv-1]==node:
                        t=True
                else:
                    t=True
                if t:
                    o += x[0] + ' ' + x[1] + '\n'
                    n.append(i)
                    e = True
        o += '----\n'
        if e:
            for i in n:
                o += pp(s,lv+1,i)
        return o
    
    print(re.sub('----\n[^\n]+\n(?=----)','',pp(s,1)))
    
    s = ['1@a', '11@aa', '111@aaa', '112@aab', '12@ab', '121@aba', '122@abb', '1221@abba', '1222@abbb', '123@abc', '1231@abca', '2@b', '21@ba']
    n = [{'id':n.split('@')[0],'val':n.split('@')[1],'parent':n.split('@')[0][:-1]} for n in s]
    
    def pp(s,p=''):
        o = []
        for i in s:
            if i['id']==p:
                o.append(i)
            if i['parent']==p:
                o.append(i)
        if len(o)>1:
            for i in o:
                print(i['id'] + ' ' + i['val'])
            print('----')
        for i in s:
            if i['parent']==p:
                pp(s,i['id'])
    
    pp(n)

    自行扩充一下程序,判断子集数量,追加前缀规则

    第一个是纯字符串判断,第二个是解析成字典列表,并追加一个parent,来判定父级

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法