Как мне выполнять математические операции с датами и сортировать их в Python? - PullRequest
0 голосов
/ 18 июня 2011

У меня есть даты в скрипте Python, с которыми мне нужно поработать, они находятся в списке. Я должен сохранить формат, который уже существует. Формат: ГГГГ-ММ-ДД. Они отображаются в форме ['2010-05-12', '2011-04-15', 'Date', '2010-04-20', '2010-11-05'], где отображается порядок дат быть случайным, и они превращаются в списки с, казалось бы, незначительной длины. Длина этих данных может быть очень большой. Мне нужно знать, как отсортировать эти даты в хронологическом порядке и опустить, казалось бы, случайно размещенные записи «Дата» из этого порядка. Затем я должен быть в состоянии выполнять математические операции, такие как перемещение вверх и вниз по списку. Например, если у меня есть пять дат по порядку, мне нужно иметь возможность взять одну дату и найти дату x через пробел перед или после этой даты в заказе. Я очень плохо знаком с Python, поэтому более простые объяснения и реализации предпочтительнее. Дайте мне знать, если какие-либо уточнения необходимы. Спасибо.

1 Ответ

4 голосов
/ 18 июня 2011

Вы задаете несколько вопросов одновременно, поэтому я отвечу на них по порядку.

Чтобы отфильтровать записи "Date", используйте функцию filter , напримерэто:

dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11']
dates_filtered = filter(lambda d: d != 'Date', dates)

Или, возможно, вот так, используя понимание списка Python , если вам легче понять:

dates_filtered = [d for d in dates if d != 'Date']

Возможно, вы захотите преобразоватьтипы данных элементов даты в вашем списке для date класса , чтобы получить доступ к некоторым методам, связанным с датами, таким как:

from datetime import datetime
date_objects = [datetime.strptime(x,'%Y-%m-%d').date() for x in dates_filtered]

И для сортировки дат, которые вы просто используетеsort метод

date_objects.sort()

Синтаксис в Python для доступа к элементам и диапазонам элементов в списках (или любом «типе последовательности») довольно мощный.Вы можете узнать больше об этом здесь .Например, если вы хотите получить доступ к двум последним датам в вашем списке, вы можете сделать что-то вроде этого:

print(date_objects[-2:]

Если вы сложите все это вместе, вы получите что-то вроде этого:

from datetime import datetime
dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11']
my_dates = [datetime.strptime(d, '%Y-%m-%d').date()
            for d in dates
            if d != 'Date']
my_dates.sort()
...