Last active
August 29, 2015 14:16
-
-
Save fabian57/b3a2d1a172a497d10351 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def unique_elements(l): | |
set_1 = set() | |
set_2 = set() | |
for i in l: | |
if i not in set_1: | |
set_1.add(i) | |
else: | |
set_2.add(i) | |
return set_1.difference(set_2) |
Voilà, in
et add
étant en complexité constante, le tout est linéaire en la taille des données, c'est-à-dire qu'on ne peut pas faire mieux.
Je me demandais si tu trouverais une autre version que la mienne, mais non ;-)
Bravo pour avoir trouvé si vite cette solution très éloignée de ton idée initiale.
Merci !
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Wow, je n'avais pas pensé à ça! C'est plus concis que ma version. Par contre, la mienne est linéaire, tandis que la tienne est quadratique (en effet,
remove
est linéaire et imbriqué dans unfor
). D'autre part, ta fonction a un effet de bord a priori indésirable: elle modifie la liste passée en paramètre en plus de renvoyer le résultat.Si tu veux une indication, regarde mon commentaire aux programmes (également quadratiques) d'Étienne et d'Alexandre.