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.

8voto

Anand Chitipothu Points 1440

Je suppose que la façon la plus efficace de trouver les doublons dans une liste est :

from collections import Counter

def duplicates(values):
    dups = Counter(values) - Counter(set(values))
    return list(dups.keys())

print(duplicates([1,2,3,6,5,2]))

Il utilise Counter une fois sur tous les éléments, puis sur tous les éléments uniques. En soustrayant la première à la seconde, on n'élimine que les doublons.

7voto

HenryDev Points 3021

Pourquoi ne pas simplement boucler sur chaque élément de la liste en vérifiant le nombre d'occurrences, puis les ajouter à un ensemble qui imprimera ensuite les doublons. J'espère que cela aidera quelqu'un.

myList  = [2 ,4 , 6, 8, 4, 6, 12];
newList = set()

for i in myList:
    if myList.count(i) >= 2:
        newList.add(i)

print(list(newList))
## [4 , 6]

7voto

alfasin Points 19063

Nous pouvons utiliser itertools.groupby afin de trouver tous les éléments qui ont des dups :

from itertools import groupby

myList  = [2, 4, 6, 8, 4, 6, 12]
# when the list is sorted, groupby groups by consecutive elements which are similar
for x, y in groupby(sorted(myList)):
    #  list(y) returns all the occurences of item x
    if len(list(y)) > 1:
        print x  

La sortie sera :

4
6

6voto

yota Points 80

Le troisième exemple de réponse acceptée donne une réponse erronée et ne tente pas de donner des doublons. Voici la version correcte :

number_lst = [1, 1, 2, 3, 5, ...]

seen_set = set()
duplicate_set = set(x for x in number_lst if x in seen_set or seen_set.add(x))
unique_set = seen_set - duplicate_set

6voto

Chetan_Vasudevan Points 1654

Sans convertir en liste et probablement la manière la plus simple serait quelque chose comme ci-dessous. Cela peut être utile lors d'un entretien lorsqu'ils demandent à ne pas utiliser les jeux.

a=[1,2,3,3,3]
dup=[]
for each in a:
  if each not in dup:
    dup.append(each)
print(dup)

\======= autre pour obtenir 2 listes distinctes de valeurs uniques et de valeurs dupliquées

a=[1,2,3,3,3]
uniques=[]
dups=[]

for each in a:
  if each not in uniques:
    uniques.append(each)
  else:
    dups.append(each)
print("Unique values are below:")
print(uniques)
print("Duplicate values are below:")
print(dups)

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