Нахождение минимальной / максимальной даты с пониманием списка в Python
Итак, у меня есть этот список:
snapshots = ['2014-04-05',
'2014-04-06',
'2014-04-07',
'2014-04-08',
'2014-04-09']
Я хотел бы найти самую раннюю дату, используя понимание списка.
Вот что у меня сейчас,
earliest_date = snapshots[0]
earliest_date = [earliest_date for snapshot in snapshots if earliest_date > snapshot]
Когда я печатаю самую раннюю дату, я ожидаю пустой массив назад, так как все значения после первого элемента списка уже больше, чем первый элемент, но я ХОЧУ одно значение.
Вот оригинальный код, чтобы показать, что я знаю, как найти минимальное значение даты:
for snapshot in snapshots:
if earliest_date > snapshot:
earliest_date = snapshot
У кого-нибудь есть идеи?
3 ответа
Просто используйте min()
или же max()
чтобы найти самые ранние или самые поздние даты:
earliest_date = min(snapshots)
lastest_date = max(snapshots)
Конечно, если ваш список дат уже отсортирован, используйте:
earliest_date = snapshots[0]
lastest_date = snapshots[-1]
Демо-версия:
>>> snapshots = ['2014-04-05',
... '2014-04-06',
... '2014-04-07',
... '2014-04-08',
... '2014-04-09']
>>> min(snapshots)
'2014-04-05'
Вообще говоря, понимание списка должно использоваться только для создания списков, а не как инструмент общего цикла. Это то что for
петли для, действительно.
>>> snapshots = ['2014-04-05',
'2014-04-06',
'2014-04-07',
'2014-04-08',
'2014-04-09']
>>> min(snapshots)
2014-04-05
Вы можете использовать min
функция.
Однако это предполагает, что ваша дата имеет формат YYYY-MM-DD, так как в вашем списке есть строки.
Если у вас возникли проблемы при сортировке списка, вы можете преобразовать элементы списка на сегодняшний день и найти их максимальное / минимальное значение.
from dateutil import parser
snapshots = ['2014-04-05',
'2014-04-06',
'2014-04-07',
'2014-04-08',
'2014-04-09']
snapshots = [parser.parse(i).date() for i in snapshots ]
max_date = max(snapshots )
min_date = min(snapshots )
print(max_date)
print(min_date)