过滤列表并返回成员满足给定条件的子列表

时间:2019-07-03 20:03:49

标签: python-2.7

我需要编写一个包含以下内容的函数: 1)input_list 2)special_member 3)sublist_size 4)sublist_delta

在上面,input_list始终被排序(即使不是,也很容易进行排序)。 每个special_member中都有一个input_list,它必须是返回的子列表的成员。 sublist_size只是返回的子列表必须有多大。 sublist_delta是子列表的最小成员和最大成员最多相差指定的增量

如果不满足上述条件,即不存在满足这些条件的子列表,则返回None

如果找到了子列表,请返回该子列表,并将这些成员从输入列表中删除。

我已经通过简单的循环和if语句尝试了我的方法。

def find_sublist(input_list, sublist_size, sublist_delta, special_member):

    if len(input_list) < sublist_size:
        return

    prev_range = None #This exists to prevent overlaps
    sublist = list()
    sorted_list = sorted(input_list, key = lambda x: x)

    for member in sorted_list:  
        if prev_range and member in prev_range: 
            continue
        end_index   = member + sublist_delta
        start_index = sorted_list.index(member)
        sublist = [sorted_list[index] for index in range(start_index,len(sorted_list)) if sorted_list[index] < end_index] 
        prev_range = [r for r in sublist]  

        if len(sublist) == sublist_size and special_member in sublist:
            print sublist
            return sublist
            for member in sublist:
                input_list.remove(member)

        else:
            return   

此代码适用于:

input_list = [0, 1, 2, 3, 4, 6, 7, 8]
sublist_size = 4
sublist_delta = 4
special_member = 0

返回[0,1,2,3]

但以下操作失败:

input_list = [0, 1, 2, 3, 4, 6, 7, 8]
sublist_size = 4
sublist_delta = 4
special_member = 4

由于special_member为4,并且[1,2,3,4]满足标准,因此应将其返回。但是返回None

非常感谢您的协助。谢谢。

0 个答案:

没有答案