2010-07-15 6 views
5

파일에서 읽은 행 목록이 있습니다. 목록을 시간 소인별로 정렬해야합니다. 정규식을 사용하여 타임 스탬프를 파싱하고 별도의 목록에 배치합니다. 두 목록의 색인이 일치합니다. 타임 스탬프 목록을 정렬하면 인덱스 순서를 얻을 수 있습니다.주어진 색인 순서로 목록 정렬

색인의 동일한 순서를 원래 줄 목록에 적용 할 수있는 방법이 있습니까? 결과는 원본 줄의 정렬 된 목록이어야합니다.

예 :

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] 

답변

4

난 당신이

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

을 할 수 있다고 생각하지만 당신은 함수를 (또는 쓸 수있는) 경우 자동으로 줄에서 시간을 추출 ,

def extract_time(line): 
    ... 
    return time 

당신은 또한

listofLines.sort(key=extract_time) 

을하거나 수있는 당신은 당신이 다른 곳에서 당신 때문에, 말, HALD 참조 그것은 원래 목록을 정렬하려면, 그대로

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

를 원래의 목록을 유지하려는 경우 정렬 된 목록을 할당 할 수 있습니다.

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