2017-02-03 7 views
0

Например, если у меня есть список вроде: [datetime.datetime(2016,5,1), datetime.datetime(2015,2,5)]
и я хочу, чтобы записи из 2015 были отфильтрованы из этого списка.Как отфильтровать строки определенного года из списка объектов datetime.datetime?

Рассмотрите, что этот список состоит из множества записей для примера, в который я помещаю только две записи.

+0

Возможный дубликат [Как отфильтровать список питона, содержащий даты в соответствии с заданной даты начала и окончания?] (Http://stackoverflow.com/questions/31375873/how-do-i-filter -a-питон-список-содержащих-дат-по-до-Given-пуск даты) –

ответ

0

Вы можете фильтровать получить отфильтрованный список с

lst=[datetime.datetime(2016,5,1),datetime.datetime(2015,2,5)] 
filtered_list = [date for date in lst if date.year == 2015] 

filtered_list является:

[datetime.datetime(2015, 2, 5, 0, 0)] 
0

Просто проверьте year атрибут:

>>> some_dates = [datetime.datetime(2016,5,1), datetime.datetime(2015,2,5)] 
>>> [x for x in some_dates if x.year != 2015] 
[datetime.datetime(2016, 5, 1)] 
0

Если у вас есть очень длинный список дат , пропуская те, которые нежелательны, можно сделать итеративно, используя встроенный filter() в Python 3, или в Python 2.

В любом случае избегать создания слишком длинного списка во-вторых.

import datetime 
try: 
    from itertools import ifilter 
except ImportError: # Python 3 
    ifilter = filter 

dates = [datetime.datetime(2016,5,1), datetime.datetime(2015,2,5)] 

for date in ifilter(lambda d: d.year != 2015, dates): 
    # do something with non-2015 date... 
    print(date) # -> 2016-05-01 00:00:00