2 votes

Répéter pour i dans la liste - n nombre de fois

Après une certaine confusion (probablement, sinon définitivement, causée par un mauvais questionnement de ma part), j'essaie de trouver comment réaliser un code pour effectuer l'opération suivante, mais n nombre de fois :

def 1_level:
    for i in list:
        for j in i:
            mylist.append(i)

def 2_levels:
    for i in list:
        for j in i:
            for k in j:
                mylist.append(k)

def 3_levels:
    for i in list:
        for j in i:
            for k in j:
                for l in k:
                    mylist.append(l)

def 4_levels:
    for i in list:
        for j in i:
            for k in j:
                for l in k:
                    for m in l:
                        mylist.apend(m)

def 5_levels:
    for i in list:
        for j in i:
            for k in j:
                for l in k:
                    for m in l:
                        for n in m:
                            mylist.append(n)

Mes réflexions sont les suivantes :

def prunelist(n,mylist):
    if n > 0:                          # if n has not been reached
        for i in mylist:
            templist = []              #create blank list for appended items
            for j in i:
                templist.append(j)     #append items one branch down
            mylist = templist          #overwrite original list 
            n -= 1                     #reduce n by 1 
            prunelist(n,mylist)        #perform operation again (assuming n >0)

    else:
        return mylist              #when n is exhausted, output list

outputlist = prunelist(n,mylist)       #perform operation

(Pour une explication plus décousue, voir l'édition !!!)

Santé

J-P

2voto

poke Points 64398

Vous y étiez presque avec votre prunelist il y a juste quelques problèmes :

  • Il n'est pas possible d'écraser une liste transmise en faisant simplement mylist = templist . Cela modifie le mylist mais pas la variable d'origine. Vous pourriez remplacer le contenu de la liste originale ici, mais une meilleure solution serait de renvoyer la nouvelle liste (c.-à-d. templist ). Cela conviendrait également à l'autre cas de récursivité où l'on renvoie la version non modifiée de mylist .
  • À chaque itération de la mylist on jette le résultat de l'itération précédente. Déplacer le templist = [] à l'extérieur de la boucle, et le return prunelist(n, templist) ainsi que

Si vous faites cela, votre fonction fonctionne déjà :

def prunelist(n, mylist):
    if n > 0:
        templist = []
        for i in mylist:
            for j in i:
                templist.append(j)
        return prunelist(n - 1, templist)
    else:
        return mylist

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X