Сортування списку 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 є проміжок між компонентами дати та часу.
Марсело Кантос

381

Це дасть вам відсортовану версію масиву.

sorted(timestamp, reverse=True)

Якщо ви хочете сортувати на місці:

timestamp.sort(reverse=True)

2
reverseдодано в 2.4. Але зауважте, що sort()це стабільно, тому два наведені біти коду не обов'язково дають однаковий результат.
Ігнасіо Васкес-Абрамс

3
@Rajeev - не забувайте, ви можете сортувати дати, лише якщо вони написані таким чином (YYYY-MM-DD HH: MM: SS), де в алфавітному порядку аналогічно хронологічно. "DD.MM.YYYY" - це хороший приклад, коли вам потрібно більше, ніж просто sort(reverse=True).
eumiro

print ("Список перед сортуванням"); друк (мій список); myList.sort (зворотний = True); print ("sortedList:" + str (myList));
Ерум

@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.