Skip to content

Instantly share code, notes, and snippets.

@fabian57
Last active August 29, 2015 14:16
Show Gist options
  • Save fabian57/b3a2d1a172a497d10351 to your computer and use it in GitHub Desktop.
Save fabian57/b3a2d1a172a497d10351 to your computer and use it in GitHub Desktop.
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)
@laowantong
Copy link

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 un for). 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.

@laowantong
Copy link

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.

@fabian57
Copy link
Author

fabian57 commented Mar 7, 2015

Merci !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment