Python: la Suppression des négatifs à partir d'une liste de nombres

La question est de supprimer les négatifs de nombres.

Quand remove_negs([1, 2, 3, -3, 6, -1, -3, 1]) est exécutée, le résultat est: [1, 2, 3, 6, -3, 1]. Le résultat est supposé être [1, 2, 3, 6, 3, 1]. ce qui se passe, c'est que si il y a deux nombres négatifs dans une ligne (par exemple, -1, -3) puis le deuxième numéro sera pas supprimé.
def main():
nombre = input("Entrez une liste de nombres: ")
remove_negs(nombre)

def remove_negs(num_list): 
  '''Remove the negative numbers from the list num_list.'''
    for item in num_list: 
        if item < 0: 
           num_list.remove(item) 

    print num_list

main()
Sonne comme une bonne job pour une compréhension de liste qui vérifie val >= 0.
Ne pas supprimer des éléments à partir d'une liste que vous itération sur que des que des variations de l'index des articles et vous pouvez vous retrouver à sauter sur certains éléments.
Comme les autres ont dit, ne pas changer le contenu du conteneur de données pendant que vous êtes à parcourir. Itérer sur une copie de l'élément dans la liste(num_list):
Aussi, vous ne devez pas appeler remove pour supprimer un élément lorsque vous savez déjà où il est. C'est (un) qui sont potentiellement mauvais, parce que remove supprime le premier élément égal à item, qui peut ne pas être celui que vous voulez, et (b) la lenteur, car cela signifie que vous avez à la recherche à toute la liste pour trouver le produit même si vous avez déjà un savait où il était. del num_list[index] est toujours la meilleure. Mais comment savez-vous de l'index? Simple: for index, item in enumerate(num_list):. (Ceci est une note de côté; il ne résolvent pas votre problème... mais il y a déjà de bonnes réponses et commentaires.)

OriginalL'auteur user3161743 | 2014-01-06