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.

18voto

wordsmith Points 25

Utilisation de pandas :

>>> import pandas as pd
>>> a = [1, 2, 1, 3, 3, 3, 0]
>>> pd.Series(a)[pd.Series(a).duplicated()].values
array([1, 3, 3])

13voto

Nikhil Prabhu Points 355

Voici une solution claire et concise

for x in set(li):
    li.remove(x)

li = list(set(li))

13voto

yǝsʞǝla Points 14233

Python 3.8 one-liner si vous n'avez pas envie d'écrire votre propre algorithme ou d'utiliser des bibliothèques :

l = [1,2,3,2,1,5,6,5,5,5]

res = [(x, count) for x, g in groupby(sorted(l)) if (count := len(list(g))) > 1]

print(res)

Imprime l'article et le compte :

[(1, 2), (2, 2), (5, 4)]

groupby prend une fonction de regroupement afin que vous puissiez définir vos regroupements de différentes manières et retourner des Tuple si nécessaire.

11voto

Edward Points 62

Collections.Counter est nouveau dans python 2.7 :

Python 2.5.4 (r254:67916, May 31 2010, 15:03:39) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
a = [1,2,3,2,1,5,6,5,5,5]
import collections
print [x for x, y in collections.Counter(a).items() if y > 1]
Type "help", "copyright", "credits" or "license" for more information.
  File "", line 1, in 
AttributeError: 'module' object has no attribute 'Counter'
>>> 

Dans une version antérieure, vous pouvez utiliser un dictateur conventionnel à la place :

a = [1,2,3,2,1,5,6,5,5,5]
d = {}
for elem in a:
    if elem in d:
        d[elem] += 1
    else:
        d[elem] = 1

print [x for x, y in d.items() if y > 1]

9voto

firelynx Points 56

Je le ferais avec les pandas, parce que j'utilise beaucoup les pandas.

import pandas as pd
a = [1,2,3,3,3,4,5,6,6,7]
vc = pd.Series(a).value_counts()
vc[vc > 1].index.tolist()

Donne

[3,6]

Ce n'est probablement pas très efficace, mais c'est certainement moins de code que beaucoup d'autres réponses, alors j'ai pensé que je pourrais contribuer

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