按日期按两种方式过滤列表

时间:2017-10-22 08:59:39

标签: python list

我想按日期对某些列表进行排序,并过滤掉列表中早于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两次。我想使用列表或生成器理解来实现同等性。

如何优化此方法?

1 个答案:

答案 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)