Нахождение минимальной / максимальной даты с пониманием списка в 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)
Другие вопросы по тегам