0
votes

Extraire la chaîne dans les listes imbriquées par niveau

OK donc c'est une chose à la pause récursive. J'ai une liste imbriquée irrégulière qui ressemble à ça: Proxy = ['A', 'B', ['C', 'D', 'E'], 'F'], 'F', ['G', ['H', 'J'], 'K'], ' l ']

Je veux extraire, remercie une fonction récursive, des articles par niveau. L'idée est d'avoir une sortie comme: Niveau 1: A, B, F, L Niveau 2: C, D, E, G, K niveau3: h, j Cette liste imbriquée représente N-Ary Tree. Jusqu'à présent, j'ai essayé STHG comme ça: p> xxx pré>

résultat est: p>

[(0, 'a'),
 (0, 'b'),
 (0, 'c'),
 (0, 'd'),
 (0, 'e'),
 (1, 'f'),
 (0, 'g'),
 (0, 'h'),
 (0, 'j'),
 (1, 'k'),
 (1, 'l')]


0 commentaires

3 Réponses :


1
votes

J'ai modifié votre code pour travailler. L'astuce ne maintient pas une profondeur de variable locale mais pour passer la profondeur à l'instance de fonction à l'aide de celle-ci. Ci-dessous le code:

chain = ['a','b',['c','d','e'],'f',['g',['h','j'],'k'],'l']

def extractbylevel(chain, depth=0):
    r=[]
    for item in chain:
        if isinstance(item,str):
            r.append((depth,item))
        else:
            r = r+extractbylevel(item, depth+1)
    return r
    
print(extractbylevel(chain))

#answer
[(0, 'a'), (0, 'b'), (1, 'c'), (1, 'd'), (1, 'e'), (0, 'f'), (1, 'g'), (2, 'h'), (2, 'j'), (1, 'k'), (0, 'l')]


1 commentaires

Oh putain!!!! J'étais près, non? Merci beaucoup tellementooooooooo beaucoup. Subhrajyoti ... Vous m'évitez de devenir totalement fou! Thanksssssss!



0
votes

Vous allez ici:

In [1]: %paste                                                                  
from collections import defaultdict

def extractbylevel(chain, depth, levels):
    for item in chain:
        if isinstance(item,str):
            levels['level {}'.format(depth)].append(item)
        else:
            extractbylevel(item, depth + 1, levels)

proxy=['a','b',['c','d','e'],'f',['g',['h','j'],'k'],'l']
output = defaultdict(list)
extractbylevel(proxy, 1, output)

for k, v in output.items():
    print(k, v)

## -- End pasted text --
level 1 ['a', 'b', 'f', 'l']
level 2 ['c', 'd', 'e', 'g', 'k']
level 3 ['h', 'j']


3 commentaires

Merci pour votre réponse. Bonne idée d'utiliser Dictionnaire pour la sortie !!! Si je ne me trompe pas, c'est quelque chose de similaire à la première recherche de la première recherche de N-Ary Trees Nope?


@Tristansalord n ​​° n ° c'est une approche première recherche.


Oh oui! Vous avez totalement raison, merci pour la correction



0
votes

Essayez ce code: xxx

Vous appelez la fonction comme ceci: xxx


2 commentaires

Merci Thunderphéonix! Lorsque j'analyse mes problèmes, je pense que c'est en partie dû au fait que je ne savais pas comment utiliser la profondeur comme un paramètre de la fonction, de sorte que la mise en variable à l'intérieur de la fonction le rend réinitialiser à chaque fois (suis-je clair?) Et était mon erreur.


@Tristansalord Il ne le rend pas réinitialisé à chaque fois, mais elle obtient une autre valeur basée sur la valeur de la fonction d'appel.