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 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