У меня есть список объектов и я хочу отфильтровать их по некоторым критериям. Я могу сделать это с пониманием списка:
import datetime, pytz
# let's have a range of 100 hourly datetimes (just an example!):
dates = [ datetime.datetime(2010, 10, 1, 0, 0, 0, 0, pytz.utc) + datetime.timedelta(hours=i) for i in xrange(100) ]
# now I want a list of all dates, where hour in (0, 6, 12, 18)...
[ dt for dt in dates if dt.hour % 6 == 0 ]
Который работает правильно.
Как я могу использовать функцию filter
(для гораздо больших наборов данных, поэтому важна скорость)? Я могу проверить, верно ли значение dt.hour (не 0):
import operator
filter(operator.attrrgetter('hour'), dates)
но как я могу добавить к ней также часть (6).__rmod__
, которая скажет мне, делится ли атрибут hour
на 6?