0
votes

Liste de retour à vide après la mise à l'aide de la fonction Reimendeven dans un autre fichier

Désolé pour le code c'est bâclé en ce moment, car j'ai essayé de le réparer. Je suis en utilisant une fonction d'un autre fichier pour supprimer des nombres pairs de ma liste, mais après que j'appelle la fonction, la liste renvoie vide. XXX PRE>

Ce sont les deux fonctions que j'appelle à partir de l'autre fichier. P>

def removeEven(listIn):
    i = 0 
    while i < len(listIn):
        if listIn[i] % 2  == 0:
            listIn.pop(i)
        else:
            i = i + 1 
    return 


0 commentaires

3 Réponses :


0
votes

Vous n'émendez pas i dans si bloc de refaireven () . Donc, par exemple, la liste d'entrée a 3 éléments. Lorsque i est 0 Initialement, vous supprimez l'élément 0. len (liste) devient 2. Dans la prochaine itération i est toujours 0 et vous supprimez le premier élément à nouveau. Ce processus continue et supprimez tous les éléments de la liste d'entrée. L'idée de boucle jusqu'à la longueur de la liste d'entrée tandis que la boucle retire l'élément de cette liste n'est pas bonne. De plus, la fonction renvoie une liste vide.

Comme je peux le voir, vous retournez une autre liste à partir de Reimendeven () . Alors pourquoi ne pas laisser la liste d'entrée tel qu'il est. Utilisez quelque chose comme - xxx


0 commentaires

0
votes

à mes yeux, c'est que vous déclarez une liste ici, résultat = [] code>, puis renvoyez-le résultat de retour code> sans rien faire sans rien faire de rien. Vous avez donc créé une liste vide, puis la retourna.

original list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newly returned list = [1, 3, 5, 7, 9]
  • est la fonction "refelever" supposé modifier la liste existante? Ou est-ce censé revenir un nouveau? Vous faites les deux ici, ce qui n'est probablement pas la meilleure solution. appeler liskin.pop () code> modifie la liste d'origine étant passée, mais vous avez créé une liste nouvelle em> à renvoyer, et vous avez également créé une nouvelle variable pour Dans votre fichier d'origine LI> ul>

    À mon avis, il serait peut-être plus approprié de renvoyer une nouvelle liste dans ce cas, c'est ce que je vais vous montrer ici P>

    def with_even_removed(list_in):
        result = []
    
        i = 0
        while i < len(list_in):
            if i % 2 != 0:
                result.append(list_in[i])
            i += 1
        return result
    
    
    l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    l2 = with_even_removed(l)
    
    print("original list =", l)
    print("newly returned list =", l2)
    


6 commentaires

Donc, supprimer la création du résultat et utiliser uniquement le retour modifiera la liste d'origine et renvoie la valeur à la liste d'origine? Donc, def reimendeven (liste): i = 0 pendant que je


Désolé, cela a l'air assez mauvais que je ne sais pas comment le faire paraître mieux dans les commentaires.


La modification de la liste d'origine se produit lorsque vous appelez "POP ()", cette méthode supprimera quelque chose de la liste que vous avez appelée. J'ai mis à jour la réponse ici avec un exemple de code pour que vous puissiez essayer, je pense que cela vous aidera avec votre problème. Si cela fonctionne pour vous, j'apprécierais que si vous l'aviez marqué comme la réponse acceptée


Merci, ce que vous avez posté travaillé, mais je me demande toujours pourquoi ce que j'avais à l'origine. Pourquoi Pop ne fonctionne pas et renvoie une liste vierge lorsque APPEND fonctionne et renvoie une liste correcte?


Pop fonctionne, mais pas la façon dont vous l'utilisiez. Pop supprimera un élément d'une liste. Je vais donc décrire ce que votre méthode originale a fait. 1. Prenez une liste comme une entrée. 2. Créez une nouvelle liste vide. 3. Supprimez tous les éléments même de la liste d'entrée. 4. Retournez la nouvelle liste vide créée à l'étape 2. Donc, leur façon dont vous l'avez utilisée dans votre question, myList1 aurait ses éléments sautés, puis SIENOUT serait un liste de vide


Merci pour votre réponse j'ai mis à jour mon message original avec la fonction de travail au bas de la poste si quelqu'un le souhaite.



0
votes

Essayez de définir une fonction qui retourne 0 pour les nombres paires et 1 pour les nombres impairs:

odd_nums = [x for x in result if is_odd(x)]


0 commentaires