如何得到这样的嵌套列表?

2024-04-27 03:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

variable tree structure

- nestedList1 variable

aa3
 |
aa1      aa2      bb1
   \    /        /
     aa       bb
       \     /
         root

- nestedList2 variable

              bb4
               |
aa3           bb2     bb3
 |              \     /
aa1      aa2      bb1    cc1
   \    /        /        |
     aa       bb         cc
       \       |        /
              root


nestedList1 = ['root', ['aa', ['aa1', ['aa3'], 'aa2'], 'bb', ['bb1']]]
nestedList2 = ['root', ['aa', ['aa1', ['aa3'], 'aa2'], 'bb', ['bb1', ['bb2', ['bb4'], 'bb3']], 'cc', ['cc1']]]

def ConvertTraverse(nlist, depth=0):
    convertlist = []
    for leaf in nlist:
        if isinstance(leaf, list):
            tmplist = ConvertTraverse(leaf, depth+1)
            convertlist.insert(0, tmplist)
        else:
            convertlist += [leaf]
    return convertlist

print ConvertTraverse(nestedList1)
print ConvertTraverse(nestedList2)
  • 结果
    嵌套列表1:[[['bb1'], [['aa3'], 'aa1', 'aa2'], 'aa', 'bb'], 'root']
    嵌套列表2:[[['cc1'], [[['bb4'], 'bb2', 'bb3'], 'bb1'], [['aa3'], 'aa1', 'aa2'], 'aa', 'bb', 'cc'], 'root']

我只想要下面的结果。你知道吗

  • 结果
    嵌套列表1:[[[['aa3'], 'aa1', 'aa2'], 'aa', ['bb1'], 'bb'], 'root']
    嵌套列表2:[[[['aa3'], 'aa1', 'aa2'], 'aa', [[['bb4'], 'bb2', 'bb3'], 'bb1'], 'bb', ['cc1'], 'cc'], 'root']

如何得到这样一个嵌套列表? 我想要一个嵌套的列表,按顺序发布遍历。你知道吗


Tags: 列表rootaaccbbbb1cc1bb2
2条回答

基本上,您需要做什么来重新排列列表:每当第n元素是标签,而第n+1元素是子列表时,交换这两个元素。您可以在几行中就地执行此操作:

def reorder(lst):
    for i, (cur, nxt) in enumerate(zip(lst, lst[1:])):
        if isinstance(cur, str) and isinstance(nxt, list):
            reorder(nxt)
            lst[i:i+2] = [nxt, cur]

对于不到位的解决方案,您只需创建列表的深度副本,然后在副本上使用它。你知道吗

我可能有点不对劲,或者完全没有抓住要点,但是我冒着这样的风险,我认为如果你把每个分支都收集到括号里,会更容易些。i、 e.将每个分支写为一个独特的[root,[branch1],[branch2],…]

nestedList1 = ['root', ['aa', ['aa1', ['aa3']], ['aa2']], ['bb', ['bb1']]]
nestedList2 = ['root', ['aa', ['aa1', ['aa3']], ['aa2']], ['bb', ['bb1', ['bb2', ['bb4']], ['bb3']]], ['cc', ['cc1']]]

然后您可以递归地更改顺序,使每个分支离开-1,主干-2。你知道吗

def recursivereverese(l):
    if len(l)<=1 or type(l) is not list:
        return l
    else:
        new = []
        for k in l[::-1]:
            new.append(recursivereverese(k))
        return new

修改后的嵌套列表上的结果:

In [127]: recursivereverese(nestedList1)
Out[127]: [[['bb1'], 'bb'], [['aa2'], [['aa3'], 'aa1'], 'aa'], 'root']

In [128]: recursivereverese(nestedList2)
Out[128]: 
[[['cc1'], 'cc'],
 [[['bb3'], [['bb4'], 'bb2'], 'bb1'], 'bb'],
 [['aa2'], [['aa3'], 'aa1'], 'aa'],
 'root']

这就是你要找的吗?你知道吗

寻找哪一个分支更深入的好阴谋是一个不同的主题。你知道吗

相关问题 更多 >