Comments on: S’affranchir des doublons d’un itérable en Python http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/ Du code, du cul Sat, 07 Nov 2015 11:08:18 +0000 hourly 1 http://wordpress.org/?v=4.1 By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-161437 Sun, 31 May 2015 14:20:00 +0000 http://sametmax.com/?p=7143#comment-161437 Les perfs sont o(e(n)), donc sur les gros flux c’est très, très lent. Et ça ne marche pas sur les flux de taille infinie.

]]>
By: Quetzal http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-161415 Fri, 29 May 2015 09:11:02 +0000 http://sametmax.com/?p=7143#comment-161415 y’a aussi comme ça:

def doublon(L0):
 
    L1=[]
    for i in L0:
        if i not in L1:
            L1.append(i)
 
    return L1

simple itération sur les items déja stocké pour vérifier que le nouveau n’y est pas… et si le loup n’y est pas, on le stocke comme nouvel item…

par contre ce que ça vaux en perf… je vous laisse faire…

merci bien pour le site…

]]>
By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-14453 Tue, 01 Oct 2013 13:28:15 +0000 http://sametmax.com/?p=7143#comment-14453 Hello @JeromeJ.

Cette solution ne fonctionne malheureusement qu’avec les itérables de taille finie et occupe pas mal de mémoire du fait des clés inutiles du dico. De plus on perd le bénéfice du travail au fur et à mesure d’un générateur.

]]>
By: JeromeJ http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-13896 Wed, 04 Sep 2013 02:03:47 +0000 http://sametmax.com/?p=7143#comment-13896 Supprime les doublons et conserve l’ordre :

import collections
import itertools

print(list(OrderedDict(itertools.zip_longest("abcddde", (None,))).keys())) # ['a', 'b', 'c', 'd', 'e']

print(list(OrderedDict(itertools.zip_longest((1,2,2,2,3), (None,))).keys())) # [1, 2, 3]

Sûrement améliorable.

Genre créer une fonction et s’assurer de renvoyer le même type que celui reçu ?
zip_longest n’est ptet pas requis non plus si on reçoit l’input via un paramètre (None,)*len(myInput) mais j’ignore si ça serait plus rapide.

]]>
By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-13485 Tue, 20 Aug 2013 20:14:55 +0000 http://sametmax.com/?p=7143#comment-13485 J’ai oublié de traiter le cas où les données sont ordonnées et les doublons contigus, c’est encore un autre algo…

]]>
By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-13484 Tue, 20 Aug 2013 20:10:46 +0000 http://sametmax.com/?p=7143#comment-13484 Merci pour la correction Xavier.

En fait wordpress escape les tags HTML en remplaçant tout < et >, sans se soucier de si c’est dans un tag ou pas.

]]>
By: Xavier Combelle http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-13481 Tue, 20 Aug 2013 19:38:18 +0000 http://sametmax.com/?p=7143#comment-13481 J’ai merdu le commentaire précédent vous pouvez le supprimer

il s’agissait simplement de générer une liste avec peu ou pas (dans le cas tester de membre dupliqué

import random;lst = list(random.random()for i in range (2600))

Car

le pire case et celui ou on ne trouve pas de membre dupliqué dans ce cas le skip_duplicate est le plus performant c’est de l’O(n) contre de l’O(n^2) pour remove_duplicate

]]>
By: Xavier Combelle http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-13480 Tue, 20 Aug 2013 19:28:42 +0000 http://sametmax.com/?p=7143#comment-13480 euh

le worst case et celui ou on ne trouve pas de duplicate dans ce cas le skip_duplicate est le plus performant c’est de l’O(n) contre de l’O(n^2)

>>> setup = """
... def skip_duplicates(iterable, key=lambda x: x):
...         fingerprints = set()
...         for x in iterable:
...                 fingerprint = key(x)
...                 if fingerprint not in fingerprints:
...                         yield x
...                         fingerprints.add(fingerprint)
... import random;lst = list(random.random()for i in range (2600))"""
>>> timeit.timeit('list(skip_duplicates(lst))', setup=setup, number=1000)
1.4679905869998038
 
 
>>> setup = """
... def remove_duplicates(lst, equals=lambda x, y: x == y):
...     if not isinstance(lst, list):
...         raise TypeError('This function works only with lists.')
...     i1 = 0
...     l = (len(lst) - 1)
...     while i1 &lt; l:
...         elem = lst[i1]
...         i2 = i1 + 1
...         while i2 >> timeit.timeit('list(remove_duplicates(lst))', setup=setup, number=1000)
^CTraceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python3.3/timeit.py", line 225, in timeit
    return Timer(stmt, setup, timer).timeit(number)
  File "/usr/lib/python3.3/timeit.py", line 190, in timeit
    timing = self.inner(it, self.timer)
  File "", line 22, in inner
  File "", line 12, in remove_duplicates
KeyboardInterrupt
 
J'ai pas eu la patience d'attendre
 
>>> timeit.timeit('list(remove_duplicates(lst))', setup=setup, number=10)
10.55606729000283

soit un facteur environ 1000

PS:mais pourquoi wordpress garde pas les caractère du code intacts ?

]]>
By: roro http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-13473 Tue, 20 Aug 2013 10:49:27 +0000 http://sametmax.com/?p=7143#comment-13473 Diablement intéressant ! Et ça nous change un peu de tes p…n de manip “Web”.
Donc: Thank you véry much…Master !

]]>