【发布时间】:2020-07-22 12:02:40
【问题描述】:
如果元素之间有一些共同点,我会尝试递归地合并列表列表。 示例输入:listt=[[0,1],[1,2],[2,3],[4,5,6]] 预期:输出:[[4, 5, 6], [0, 1, 2, 3]]
这是我的功能:
def merge(a, b):
max_offset = len(b) # can't overlap with greater size than len(b)
for i in reversed(range(max_offset+1)):
# checks for equivalence of decreasing sized slices
if a[-i:] == b[:i]:
return [a + b[i:]]
return [a,b]
def recursive_func_test(listt,final_merged_list):
something_changed=False
for i, j in itertools.combinations(list(range(0,len(listt))), 2):
merged_list=merge(listt[i],listt[j])
if len(merged_list)==1:
final_merged_list.append(merged_list[0])
something_changed=True
if something_changed:
for ele in listt:
is_sub=False
for ele_m in final_merged_list:
if set(ele).issubset(set(ele_m)):
is_sub=True
if not is_sub:
final_merged_list.append(ele)
updated_merged_list=[]
subset_list=[]
for a, b in itertools.combinations(list(range(0,len(final_merged_list))), 2):
if set(final_merged_list[a]).issubset(set(final_merged_list[b])):
subset_list.append(a)
elif set(final_merged_list[b]).issubset(set(final_merged_list[a])):
subset_list.append(b)
for i in range(len(final_merged_list)):
if i not in subset_list:
updated_merged_list.append(final_merged_list[i])
final_merged_list=updated_merged_list
final_merged_list=recursive_func_test(updated_merged_list,final_merged_list)
else:
return final_merged_list
这是我尝试调用该函数的方式:
listt=[[0,1],[1,2],[2,3],[4,5,6]]
final_merged_list=[]
recursive_func_test(listt,final_merged_list)
print(final_merged_list)
问题是我的结果是 [[0, 1, 2], [1, 2, 3], [4, 5, 6]] 这是预期答案之前的一次递归。不确定问题出在哪里,因为当我在函数的开头添加 print 时,final_merged_list 中的值是预期的输出。任何帮助表示赞赏。
【问题讨论】: