Comment faire pour supprimer les doublons d'une liste à l'aide de la liste de compréhension?
Comment faire pour supprimer les doublons d'une liste à l'aide de la liste de compréhension? J'ai code suivant:
a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
b = []
b = [item for item in a if item not in b]
mais ça ne fonctionne pas, tout produit identique liste. Pourquoi de sa production d'une liste identique?
Parce que
double possible de Algorithme - Comment faire pour supprimer les éléments en double dans la liste de manière efficace?
Que signifie compréhension de liste ne fonctionne pas comme la boucle?
Si vous ne voulez pas utiliser un jeu parce que vous voulez conserver l'ordre, regardez la
C'est une sorte de boucle, mais il génère le résultat d'un seul coup... il n'est pas surprenant non plus. Chaque fois que vous avez l'expression
b
est vide au moment où vous exécutez if item not in b
. La compréhension de liste se fait dans la mémoire et le résultat est affecté à b
à la fin.double possible de Algorithme - Comment faire pour supprimer les éléments en double dans la liste de manière efficace?
Que signifie compréhension de liste ne fonctionne pas comme la boucle?
Si vous ne voulez pas utiliser un jeu parce que vous voulez conserver l'ordre, regardez la
unique_everseen
itérateur dans le itertools recettes. Utiliser comme ceci: b = list(unique_everseen(a))
C'est une sorte de boucle, mais il génère le résultat d'un seul coup... il n'est pas surprenant non plus. Chaque fois que vous avez l'expression
x = y
, puis y
est évalué en premier, puis le résultat est affecté à x
. Mais lors de l'évaluation de y
, x
n'est pas modifié. Auriez-vous eu les mêmes doutes, si vous avez eu b = list(item for item in a if item not in b)
à la place?OriginalL'auteur Alinwndrld | 2012-05-11
Vous devez vous connecter pour publier un commentaire.
Il s'agit de produire une liste identique comme
b
contient pas d'éléments au moment de l'exécution.Ce que vous voulez ce que vous:
OriginalL'auteur Christian Witts
Si vous n'avez pas l'esprit en utilisant une technique différente de compréhension de liste, vous pouvez utiliser un jeu pour que:
jeu de ne garder que la première commande... donc il suffit de prendre l'avis de qui
OriginalL'auteur Niek de Klein
La raison pour laquelle la liste est inchangé, c'est que
b
débute vide. Cela signifie queif item not in b
est toujoursTrue
. Seulement après que la liste a été générée est cette nouvelle non-vide liste affectée à la variableb
.Je ne pense pas que c'est une conclusion valide. Cela signifie seulement que la compréhension de liste est évaluée avant la cession. La liste pourrait bien être intégré dans une boucle interne.
OriginalL'auteur CB Bailey
Utilisation
keys
sur undict
construit avec des valeurs dansa
que ses clés.Ou l'utilisation d'un ensemble:
OriginalL'auteur Vikas
Utilisation groupby:
Laisser de côté l'argument-clé si vous ne se soucient pas de l'ordre de la valeur est d'abord apparu dans la liste d'origine, par exemple
Vous pouvez faire des choses cool avec
groupby
. Afin d'identifier les éléments qui apparaissent plusieurs fois:Ou à construire une fréquence dictionnaire:
Il y a quelques fonctions très utiles dans la itertools module:
chain
,tee
etproduct
pour en nommer quelques!OriginalL'auteur Josh Bode
OriginalL'auteur rajkrish06