gpt4 book ai didi

python - 合并功能仅适用于有序列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:20 26 4
gpt4 key购买 nike

我有这 2 个列表作为输入:

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])

如果我的列表在列表列表中的顺序不同,我必须在函数中修改什么才能获得第一个所需的输出!?我使用 python 3。谢谢!

稍后编辑:

合并规则:当list1[listindex][1] == list2[listindex][1]时(例如:当14==14时),替换为list1 -> list2[2]list2[4] (例如:“Y”和 200),如果不是,则只需添加 list2 中不匹配的列表code> 到 list1 (就像我想要的输出一样),并保留 list1 中不匹配的内容(例如:['C', 16, 'F ', 50, 60])

需要注意的是,list1 和 list2 可以有不同的长度(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com