2010-07-15 22 views
5

Tengo una lista de líneas leídas de un archivo. Necesito ordenar la lista por marca de tiempo. He analizado la marca de tiempo usando expresiones regulares y las coloco en una lista separada. Los índices de las dos listas coincidirán. Una vez que clasifico la lista de marcas de tiempo, puedo obtener el orden de los índices.Ordenar la lista por orden de índices

¿Hay alguna forma de aplicar el mismo orden de índices a la lista original de líneas? El resultado debe ser la lista ordenada de líneas originales.

Ejemplo:

listofLines = ['log opened 16-Feb-2010 06:37:56 UTC', 
       '06:37:58 Custom parameters are in use', 
       'log closed 16-Feb-2010 05:26:47 UTC'] 
listofTimes = ['06:37:56', '06:37:58', '05:26:47'] 
sortedIndex = [2,0,1] 

Respuesta

4

creo que se podría hacer

[line for (time,line) in sorted(zip(listofTimes, listofLines))] 

Pero si usted tiene (o podría escribir) una función para extraer automáticamente el tiempo de la línea de ,

def extract_time(line): 
    ... 
    return time 

también se puede hacer

listofLines.sort(key=extract_time) 

o si desea mantener la lista original intacto,

sorted(listofLines, key=extract_time) 
2
sorted(zip(listofTimes, listofLines)) 
17
[listofLines[i] for i in sortedIndex] 
0

Si desea ordenar la lista original, porque usted, digamos, referencias Hald a otro lugar , puede asignarle la lista ordenada:

my_list[:] = [my_list[i] for i in sorted_indexes] # [:] is key!