Сортировка списка Python по убыванию


334

Как я могу отсортировать этот список в порядке убывания?

timestamp = [
    "2010-04-20 10:07:30",
    "2010-04-20 10:07:38",
    "2010-04-20 10:07:52",
    "2010-04-20 10:08:22",
    "2010-04-20 10:08:22",
    "2010-04-20 10:09:46",
    "2010-04-20 10:10:37",
    "2010-04-20 10:10:58",
    "2010-04-20 10:11:50",
    "2010-04-20 10:12:13",
    "2010-04-20 10:12:13",
    "2010-04-20 10:25:38"
]

Ответы:


387

В одной строке, используя lambda:

timestamp.sort(key=lambda x: time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6], reverse=True)

Передача функции list.sort:

def foo(x):
    return time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6]

timestamp.sort(key=foo, reverse=True)

13
Преобразование в кортеж времени не требуется.
Марсело Кантос

2
@Marcelo: только по стечению обстоятельств.
Игнасио Васкес-Абрамс

16
@ IgnacioVazquez-Abrams нет, не случайно. ISO 8601 специально разработан таким образом, что алфавитный порядок совпадает с хронологическим порядком.
JWG

@jwg Согласитесь с мнением (это явно по дизайну, а не по совпадению), но данный формат не соответствует ISO 8601.
Marcelo Cantos

2
@jwg есть пробел между датой и временем.
Марсело Кантос

382

Это даст вам отсортированную версию массива.

sorted(timestamp, reverse=True)

Если вы хотите отсортировать на месте:

timestamp.sort(reverse=True)

2
reverseбыл добавлен в 2.4. Но обратите внимание, что sort()это стабильно, поэтому два приведенных кода не обязательно дадут одинаковый результат.
Игнасио Васкес-Абрамс

3
@Rajeev - не забывайте, что вы можете сортировать даты, только если они написаны таким образом (ГГГГ-ММ-ДД ЧЧ: ММ: СС), где в алфавитном порядке то же самое, что и в хронологическом порядке. «ДД.ММ.ГГГГ» будет хорошим примером, когда вам нужно больше, чем просто sort(reverse=True).
eumiro

печать («Список перед сортировкой»); печать (MyList); myList.sort (reverse = True); print ("sortedList:" + str (myList));
Erum

@Erum это ответ, а не комментарий, и, как ответ, это излишне.
Марсело Кантос


10

Поскольку ваш список уже находится в порядке возрастания, мы можем просто перевернуть список.

>>> timestamp.reverse()
>>> timestamp
['2010-04-20 10:25:38', 
'2010-04-20 10:12:13', 
'2010-04-20 10:12:13', 
'2010-04-20 10:11:50', 
'2010-04-20 10:10:58', 
'2010-04-20 10:10:37', 
'2010-04-20 10:09:46', 
'2010-04-20 10:08:22',
'2010-04-20 10:08:22', 
'2010-04-20 10:07:52', 
'2010-04-20 10:07:38', 
'2010-04-20 10:07:30']

9

Вы простой тип:

timestamp.sort()
timestamp=timestamp[::-1]

Это странный ответ, потому что вы выполняете сортировку на месте, а затем наоборот. Если есть другая переменная, налагающая псевдоним на исходный список, ее значение впоследствии не будет иметь элементов в их исходном порядке или в порядке убывания; псевдоним будет указывать на список, отсортированный в порядке возрастания . Это может быть довольно удивительно, и источником тонких ошибок.
kaya3

0

Вот еще один способ


timestamp.sort()
timestamp.reverse()
print(timestamp)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.