我有两个列表作为输入:
list1 = [['A', 14, 'I', 10, 20], ['B', 15, 'S', 30, 40], ['C', 16, 'F', 50, 60]]
list2 = [['A', 14, 'Y', 0, 200], ['B', 15, 'M', 0, 400], ['C', 17, 'G', 0, 600]]
我想要的结果是:
finalList = [['A', 14, 'Y', 10, 200], ['B', 15, 'M', 30, 400], ['C', 16, 'F', 50, 60],['C', 17, 'G', 0, 600]]
使用此功能:
def custom_merge(list1, list2):
finalList = []
for sub1, sub2 in zip(list1, list2):
if sub1[1]==sub2[1]:
out = sub1.copy()
out[2] = sub2[2]
out[4] = sub2[4]
finalList.append(out)
else:
finalList.append(sub1)
finalList.append(sub2)
return finalList
我确实会得到我想要的输出,但是如果我切换位置(list2[1]和list2[2])和list2:
list2 = [['A', 14, 'Y', 0, 200], ['C', 17, 'G', 0, 600], ['B', 15, 'M', 0, 400]]
然后输出如下:
[['A', 14, 'Y', 10, 200], ['B', 15, 'S', 30, 40], ['C', 17, 'G', 0, 600], ['C', 16, 'F', 50, 60], ['B', 15, 'M', 0, 400]]
(注意多余的['B',15',M',0400])
如果我的列表在我的列表中有不同的顺序,为了得到第一个所需的输出,我必须在函数中修改什么!?我使用python3。谢谢您!你知道吗
以后编辑:
合并规则:
当list1[listindex][1] == list2[listindex][1]
(例如:当14==14
)时,在list1
->;list2[2]
和list2[4]
(例如:“Y”和200)中替换,如果不只是按原样将不匹配的列表从list2
添加到list1
(就像在我所需的输出中一样),还保留列表1中不匹配的列表(例如:['C', 16, 'F', 50, 60]
)
需要注意的是,list1和list2可以有不同的len(list1可以有比list2更多的列表,反之亦然)
编辑.2 我发现这个:
def combine(list1,list2):
combined_list = list1 + list2
final_dict = {tuple(i[:2]):tuple(i[2:]) for i in combined_list}
merged_list = [list(k) + list (final_dict[k]) for k in final_dict]
return merged_list
^^^那可能有用,还在测试!你知道吗
在合并列表之前,可以按子列表中的第一个元素对列表进行排序。你知道吗
测试:
相关问题 更多 >
编程相关推荐