我想按日期对某些列表进行排序,并过滤掉列表中早于now - days_count
天或过多ints(超过keep_count)的整数。这就是我现在所拥有的:
def __get_datetime_by_int(some_int):
#return some_datetime
def __project_tmp_older_then(int_lst, days_count, keep_count):
int_lst.sort(key = lambda some_int: __get_date_by_int(some_int), reverse = True)
old_ints = [some_int for some_int in int_lst
if (datetime.now() - __get_datetime_by_int(some_int)).days >= days_count or
int_lst.index(some_int) > keep_count]
return old_ints
问题是我在__get_datetime_by_int
的每个元素上调用int_lst
两次。我想使用列表或生成器理解来实现同等性。
如何优化此方法?
答案 0 :(得分:1)
def filtered(int_lst):
""" Generator yielding the first `keep_count` dates older than `days_count`"""
for some_int in int_lst[keep_count:]:
date_from_int = __get_date_by_int(some_int)
if (datetime.now() - date_from_int).days >= days_count:
yield some_int, date_from_int
old_ints = sorted(filtered(int_lst), key=lambda x: x[1], reverse=True)