Estoy haciendo una iteración de 3 palabras, cada una de aproximadamente 5 millones de caracteres, y quiero encontrar secuencias de 20 caracteres que identifiquen cada palabra. Es decir, quiero encontrar todas las secuencias de longitud 20 en una palabra que sea única para esa palabra. Mi problema es que el código que he escrito toma mucho tiempo para ejecutarse. Nunca he completado una sola palabra ejecutando mi programa durante la noche.Python, enorme problema de iteración de rendimiento
La siguiente función contiene una lista que contiene diccionarios donde cada diccionario contiene cada palabra posible de 20 y su ubicación a partir de una de las 5 millones de palabras largas.
Si alguien tiene una idea de cómo optimizar este estaría muy agradecido, no tengo ni idea de cómo continuar ...
aquí es una muestra de mi código:
def findUnique(list):
# Takes a list with dictionaries and compairs each element in the dictionaries
# with the others and puts all unique element in new dictionaries and finally
# puts the new dictionaries in a list.
# The result is a list with (in this case) 3 dictionaries containing all unique
# sequences and their locations from each string.
dicList=[]
listlength=len(list)
s=0
valuelist=[]
for i in list:
j=i.values()
valuelist.append(j)
while s<listlength:
currdic=list[s]
dic={}
for key in currdic:
currval=currdic[key]
test=True
n=0
while n<listlength:
if n!=s:
if currval in valuelist[n]: #this is where it takes to much time
n=listlength
test=False
else:
n+=1
else:
n+=1
if test:
dic[key]=currval
dicList.append(dic)
s+=1
return dicList
Orden n * * 2 * el tamaño del diccionario. No es de extrañar que sea lento. –
+1 por publicar tu código, en lugar de pedir que seamos lectores mentales, ¡gracias! – PaulMcG
Tal vez eche un vistazo a este documento que habla sobre el uso del filtro de floración para lo que parece ser una tarea muy similar: http://www.serpentine.com/bos/files/padl09.pdf. El documento trata sobre Haskell, por lo tanto publicando un comentario, HTH. –