Fonction Python native pour supprimer les éléments NoneType de la liste?
Je suis à l'aide de Magnifiques Soupe en Python pour gratter quelques données à partir de fichiers HTML. Dans certains cas, Belle Soupe renvoie les listes qui contiennent à la fois string
et NoneType
objets. J'aimerais filtrer toutes les NoneType
objets.
En Python, les listes contenant NoneType
objets ne sont pas itérable, de sorte compréhension de liste n'est pas une option pour cela. Plus précisément, si j'ai une liste lis
contenant NoneTypes
et j'essaie de faire quelque chose comme [x for x in lis (some condition/function)]
Python génère l'erreur TypeError: argument of type 'NoneType' is not iterable
.
Comme nous l'avons vu dans d'autres postesil est simple à implémenter cette fonctionnalité dans une fonction définie par l'utilisateur. Voici mon goût:
def filterNoneType(lis):
lis2 = []
for l in links: #filter out NoneType
if type(l) == str:
lis2.append(l)
return lis2
Cependant, j'aimerais utiliser un construit en fonction Python pour cela, si elle existe. J'aime toujours pour simplifier mon code, si possible. Python ont une fonction intégrée qui permet de supprimer NoneType
objets à partir de listes?
source d'informationauteur solvingPuzzles
Vous devez vous connecter pour publier un commentaire.
Je pense que la façon la plus propre de le faire serait:
Vous pouvez le faire en utilisant la liste de compréhension:
Comme indiqué dans les commentaires vous pouvez également utiliser
is not
même si fondamentalement, il compile à la même bytecode:Vous pourrait également être utilisé
filter
(note: cela permettra également de filtrer les cordes à vide, si vous voulez plus de contrôle sur ce que vous filtre, vous pouvez passer d'une fonction à la place deNone
):Il y a toujours la itertools approche si vous voulez plus efficace en boucle, mais ces approches de base devrait fonctionner pour la plupart de la journée à jour des cas.
Compréhension de liste, comme d'autres réponses proposées ou, par souci d'exhaustivité:
Si la liste est énorme, un itérateur approche est supérieure:
Vous pouvez facilement supprimer tous les
NoneType
objets à partir d'une liste à l'aide d'une compréhension de liste: