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?
5 respuestas
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.
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
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']
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)
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])]