Як сортувати список дат чи об'єктів дати?


79

Як відсортувати список об’єктів дати та / або дати та часу? Прийнята відповідь тут не працює для мене:

from datetime import datetime,date,timedelta


a=[date.today(), date.today() + timedelta(days=1), date.today() - timedelta(days=1)]
print a # prints '[datetime.date(2013, 1, 22), datetime.date(2013, 1, 23), datetime.date(2013, 1, 21)]'
a = a.sort()
print a # prints 'None'....what???

1
lst.sort () - операція на місці
Андреас Юнг,

1
Чи читали ви INPLACE операцію? Чому метод повертає щось, що виконується в існуючій структурі даних? Новий список не створюється, а існуючий список не повертається. Це повністю навмисна та задокументована поведінка, брате.
Андреас Юнг,

1
Я використовував sorted()обробка списку розуміння наступним чином : sorted([datetime.strptime(dt, "%Y-%m-%d %H:%M:%S") for dt in dateList]). Мої дати були рядками, які виглядали так: '2018-09-07 19:00:46'
Грант Шеннон,

Відповіді:


127

Ви отримуєте, Noneоскільки list.sort()він працює на місці , це означає, що він нічого не повертає, а змінює сам список. Вам потрібно лише зателефонувати, a.sort()не призначаючи його aзнову.

Існує вбудована функція sorted(), яка повертає відсортовану версію списку - теж a = sorted(a)буде робити те, що ви хочете.


3
який шлях найкращий? вони роблять те саме під ковдрою?
radtek

2
@radtek list.sort()змінює об'єкт, з якого його викликають (що завжди є списком). sorted()працює з будь-яким ітерабельним, а не лише списком. list.sort()може бути трохи швидшим, якщо у вас дуже великий список, оскільки він sorted()створює новий список і потребує копіювання елементів до нього.
flyman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.