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.
Réponses
Trop de publicités?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.
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]
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
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
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)
1 votes
Duplicata possible de Comment supprimer les doublons d'une liste en Python tout en préservant l'ordre ?
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.