我有这两个列表作为输入: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',0,400])如果我的列表在列表中的顺序不同,我必须在函数中进行哪些修改才能获得我的第一个期望的输出!我使用python3。谢谢!之后编辑:合并规则:当list1[listindex][1] == list2[listindex][1](例如:14==14时),替换为list1-> list2[2]和list2[4](例如:'Y'和200),如果不是,则仅将list2中不匹配的列表添加到保持原样(例如在我所需的输出中),并保留list1中不匹配的内容(例如:list1)需要注意的是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^^可行,仍在测试! 最佳答案 您可以在合并列表之前按子列表中的第一个元素对列表进行排序。def custom_merge(list1, list2): finalList = [] for sub1, sub2 in zip(sorted(list1), sorted(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测试:list1 = [['A', 14, 'I', 10, 20], ['B', 15, 'S', 30, 40], ['C', 16, 'F', 50, 60]]list2 = [['A', 14, 'Y', 0, 200], ['C', 17, 'G', 0, 600], ['B', 15, 'M', 0, 400]]custom_merge(list1, list2)# returns:[['A', 14, 'Y', 10, 200], ['B', 15, 'M', 30, 400], ['C', 16, 'F', 50, 60], ['C', 17, 'G', 0, 600]]关于python - 合并功能仅适用于有序列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46218206/