Mostrar posición de elementos repetidos de una lista Python

publicado por: Anonymous

Estoy haciendo un pequeño desarrollo, y necesito tener la posición de los elementos repetidos de una lista.

Lo que he hecho para esto es lo siguiente:

FDE = [1,2,3,4,4,3]
for k in range(6):
   m=[i for i,x in enumerate(FDE) if x==FDE[k]]
print(m)

El resultado que me muestra la pantalla es:

m=[2,5]

En resumen, solo busca el repetido '3' pero no el '4' que igual está repetido , Lo ideal sería que imprima :

m=[2,3,4,5]

solución

Hay varias formas de hacerlo, una de ellas es usar el método count para ver si un elemento se encuentra más de una vez en la lista. No es lo más eficiente pero si conciso:

FDE = [1,2,3,4,4,3]
m=[i for i, _ in enumerate(FDE) if FDE.count(x)>1]
print(m)

Salida:

[2, 3, 4, 5]

Edición:

Como te he comentado, una opción para saber el valor asociado a los índices es usar un diccionario que tenga como clave cada elemento único duplicado y como valor una lista con los índices donde se encuentra.

De nuevo hay varias opciones, una relativamente simple es usar collections.defaultdict. Creamos un diccionario que almacena los elementos únicos como claves y sus índices como valores, posteriormente nos quedamos con aquellas parejas que tengan más de un índice:

from collections import defaultdict

FDE = [1,2,3,4,4,3]

aux = defaultdict(list)
for index, item in enumerate(FDE):
    aux[item].append(index)
result = {item: indexs for item, indexs in aux.items() if len(indexs) > 1}
print(result)

Salida:

{3: [2, 5], 4: [3, 4]}

Respondido por: Anonymous

Leave a Reply

Your email address will not be published.