['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
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,来判定父级
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m