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. 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
3 Réponses :
Vous n'émendez pas Comme je peux le voir, vous retournez une autre liste à partir de i code> dans si code> bloc de refaireven () code>. Donc, par exemple, la liste d'entrée a 3 éléments. Lorsque i code> est 0 Initialement, vous supprimez l'élément 0. len (liste) code> devient 2. Dans la prochaine itération i code> 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. Reimendeven () Code>. Alors pourquoi ne pas laisser la liste d'entrée tel qu'il est. Utilisez quelque chose comme - p>
à mes yeux, c'est que vous déclarez une liste ici, À 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> 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]
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> 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)
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 code> aurait ses éléments sautés, puis SIENOUT code> 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.
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)]