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 Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-183281 Sat, 03 Dec 2016 12:27:01 +0000 http://sametmax.com/?p=7143#comment-183281 Je n’ai rien compris.

]]>
By: hlaure http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-183204 Thu, 01 Dec 2016 14:57:08 +0000 http://sametmax.com/?p=7143#comment-183204 error sur sur remove_duplicates()

list_tst = [1,2,3,1,1,5,2,3,3,3,8,0,1]

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

elem = lst[i1]

i2 = i1 + 1

while i2 <= l:

if equals(elem, lst[i2]):

del lst[i2]

l -= 1

else:

i2 += 1

i1 += 1

return lst

]]>
By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-177117 Mon, 14 Mar 2016 15:50:56 +0000 http://sametmax.com/?p=7143#comment-177117 list(set(l)) ne fait pas la même chose:

  • il n’y a pas de modifications in place: les données sont copiées deux fois en mémoire.
  • ça ne gère pas les générateurs de taille indéfinie;
  • ça fait perdre l’ordre des éléments;
  • ça ne marche que si les éléments sont hashables.
]]>
By: zak http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-177073 Sun, 13 Mar 2016 14:36:03 +0000 http://sametmax.com/?p=7143#comment-177073 salut ,

salut ,j’ai utilisé ta méthode remove_duplicates(lst) dans mon programme et j’ai remarqué qu’elle ne supprime pas tous les dupliqués !,cette méthode marche très bien (list(set(l)) ) !!!!!

]]>
By: Sam http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-174972 Wed, 27 Jan 2016 21:35:55 +0000 http://sametmax.com/?p=7143#comment-174972 Tu perds l’ordre de tes données, tu ne peux pas choisir le critère de dédoublement, tu n’as pas le choix sur le trade-off CPU/Mémoire et ça ne marche pas sur les itérables de tailles indéfinis.

]]>
By: Fabien http://sametmax.com/saffranchir-des-doublons-dun-iterable-en-python/#comment-174970 Wed, 27 Jan 2016 21:16:20 +0000 http://sametmax.com/?p=7143#comment-174970 Est-ce que la conversion en set ne serait pas plus efficace (ou au moins plus simple) ?

def remove_duplicates2(lst):

return list(set(lst))

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

]]>