575 votes

Comment trouver les doublons dans une liste et créer une autre liste avec eux ?

Comment puis-je trouver les doublons dans une liste Python et créer une autre liste des doublons ? La liste ne contient que des entiers.

1 votes

1 votes

Voulez-vous les duplicata une fois, ou à chaque fois qu'ils sont vus à nouveau ?

0 votes

Je pense que cette question a été traitée avec beaucoup plus d'efficacité ici. stackoverflow.com/a/642919/1748045 L'intersection est une méthode intégrée au jeu et devrait faire exactement ce qui est requis.

0voto

ASHISH RANJAN Points 521
def removeduplicates(a):
  seen = set()

  for i in a:
    if i not in seen:
      seen.add(i)
  return seen 

print(removeduplicates([1,1,2,2]))

0voto

firelynx Points 56

Je ne vois pas de solution qui utilise uniquement des itérateurs, alors nous y voilà

Cela nécessite que la liste soit triée, ce qui peut être l'inconvénient ici.

a = [1,2,3,2,1,5,6,5,5,5]
a.sort()
set(map(lambda x: x[0], filter(lambda x: x[0] == x[1], zip(a, a[1:]))))

{1, 2, 5}

Vous pouvez facilement vérifier la rapidité de cette opération sur votre machine avec un million de doublons potentiels grâce à ce morceau de code :

Générer d'abord les données

import random
from itertools import chain
a = list(chain(*[[n] * random.randint(1, 2) for n in range(1000000)]))

Et lancez le test :

set(map(lambda x: x[0], filter(lambda x: x[0] == x[1], zip(a, a[1:]))))

Inutile de dire que cette solution n'est bonne que si votre liste est déjà triée.

0voto

Artier Points 1114

Essayez ceci pour vérifier les doublons

>>> def checkDuplicate(List):
    duplicate={}
    for i in List:
            ## checking whether the item is already present in dictionary or not
            ## increasing count if present
            ## initializing count to 1 if not present

        duplicate[i]=duplicate.get(i,0)+1

    return [k for k,v in duplicate.items() if v>1]

>>> checkDuplicate([1,2,3,"s",1,2,3])
[1, 2, 3]

0voto

Ruman Points 150

Sans l'aide d'aucune structure de données de python, vous pouvez simplement essayer le code suivant de la mienne. Cela fonctionnera pour trouver les doublons de différents types d'entrées comme les chaînes de caractères, les listes, etc.

# finding duplicates in unsorted an array 
def duplicates(numbers):
    store=[]
    checked=[]
    for i in range(len(numbers)):
        counter =1 
        for j in range(i+1,len(numbers)):
            if numbers[i] not in checked and numbers[j]==numbers[i] :
                counter +=1 
        if counter > 1 :
            store.append(numbers[i])
            checked.append(numbers[i])
    return store

print(duplicates([1,2,2,3,3,3,4,4,5]))  # output:  [2, 3, 4]
print(duplicates("madam"))              # output:  ['m', 'a']

0voto

John Points 97

Vérifie simplement, pour tous les éléments de la liste, si le premier indice d'un élément est égal au dernier indice de cet élément :

>>> lastindex = lambda arr, el: len(arr) - arr[::-1].index(el) -1
>>> is_duplicate  = lambda arr, el: arr.index(el) != lastindex(arr, el)
>>> duplicates = lambda arr: [*set(x for x in arr if is_duplicate(arr, x))]
>>> 
>>> a=[2,3,5,7,11,13, 2,17,7,7,17,18,3,19,5,2,7,48,48,2,19]
>>> duplicates(a)
[2, 3, 5, 7, 48, 17, 19]
>>>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X