Сортировать список по заданному порядку индексов - PullRequest
6 голосов
/ 16 июля 2010

У меня есть список строк, прочитанных из файла.Мне нужно отсортировать список по отметке времени.Я разобрал отметку времени с помощью регулярных выражений и поместил их в отдельный список.Индексы двух списков будут совпадать.После сортировки списка меток времени я могу получить порядок индексов.

Есть ли способ применить тот же порядок индексов к исходному списку строк?Результатом должен быть отсортированный список исходных строк.

Пример:

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 ]

21 голосов
/ 16 июля 2010
[listofLines[i] for i in sortedIndex]
7 голосов
/ 16 июля 2010

Я думаю, вы могли бы сделать

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

Но если у вас есть (или вы можете написать) функцию для автоматического извлечения времени из строки,

def extract_time(line):
    ...
    return time

Вы могли бы также сделать

listofLines.sort(key=extract_time)

или, если вы хотите сохранить исходный список без изменений,

sorted(listofLines, key=extract_time)
2 голосов
/ 16 июля 2010
sorted(zip(listofTimes, listofLines))
0 голосов
/ 14 июня 2016

Если вы хотите отсортировать исходный список, потому что вы, скажем, не указали ссылки на него в другом месте, вы можете назначить ему отсортированный список:

my_list[:] = [my_list[i] for i in sorted_indexes]  # [:] is key!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...