我需要编写一个包含以下内容的函数:
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
。
非常感谢您的协助。谢谢。