Estoy tratando de encontrar una lista de todos los elementos duplicados en un list.

Mi código:

list=['see','eat','feel','see','eat']
i=0
j=0
l=[]

for i in range(len(list)-1):
    j=i+1
    for j in range(len(list)):
        if (list[i]==list[j]):
            l.append(list[i])

print(l)

Salida esperada:

['see', 'eat']

Salida real:

['see', 'see', 'eat', 'eat', 'feel', 'see', 'see']

Los duplicados solo deberían estar allí en list. ¿Dónde me estoy equivocando?

1
FMA 6 oct. 2019 a las 15:52

5 respuestas

La mejor respuesta

Estas dos líneas:

j=i+1
for j in range(len(list)):

Primero le das un valor a j, luego en el ciclo for lo dejas en un ciclo de 0 a len (list) y el valor se olvida. Eso no fue lo que quisiste decir.

En lugar de

for j in range(i+1, len(list)):

Haría lo que quisieras, creo.

Pero eso todavía le da problemas si se produce algún valor, por ejemplo, tres veces.

3
RemcoGerlich 6 oct. 2019 a las 12:56

Prueba esto:

l=[]

for i in list:
    c=0
    for j in list:
        if i==j :
            c+=1
    if c!=1:
        flag=0
        for k in l:
            if k==i:
                flag=1
        if flag==0:
            l.append(i)
print(l) 

En este código utilicé tres bucles 1. para repetir cada valor para verificar que el clima esté duplicado o no 2. para repetir cada valor y compararlos juntos. tenga en cuenta que los valores de repetición tendrán un valor en c de 2 o más 3. para verificar si los valores almacenados en l no se repiten

0
Pritesh Wani 6 oct. 2019 a las 13:10

Simplemente puede usar la clase de biblioteca estándar collections.Counter() para un enfoque más eficiente.

import collections

lst = ['see','eat','feel','see','eat']
lst_counts = collections.Counter(lst)
duplicates = [value for (value, count) in lst_counts.items() if count > 1]

print(duplicates)

Salidas

['see', 'eat']

3
AKX 6 oct. 2019 a las 12:55

Tienes que hacer bucles, por lo que obtienes todas las combinaciones de pares de dos palabras.

Lo mejor es usar solo un bucle y realizar un seguimiento de los elementos duplicados:

seen = set()
duplicates = set()
for item in list:
    if item in seen:
        duplicates.add(item)
    else:
        seen.add(item)
0
Daniel 6 oct. 2019 a las 13:07

Puedes hacerlo usando la lista de comprensión como a continuación

ls=['see','eat','feel','see','eat']

[ls[i] for i in range(len(ls)) for j in range(len(ls)) if (j>i and ls[i]==ls[j])]
1
Dev Khadka 6 oct. 2019 a las 13:03
58257424