基于索引的两个列表的连接操作

2024-04-25 14:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表:

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

(这只是一个只有3个列表的示例,我有更多的列表,但它们的格式和应用规则完全相同)

这就是我想要的结果:

finalList = [['A', 14, 'Y', 10, 200], ['B', 15, 'M', 30, 400], ['C', 16, 'F', 50, 60],['C', 17, 'G', 0, 600]]

这是我计算finalList的规则:

list1[listindex][1] == list2[listindex][1](例如:当14==14)时,在list1 -> list2[2]list2[4](例如:“Y”和200)中替换,如果不是这样的话,只需将list2中不匹配的列表按原样添加到list1(如在我所需的输出中),并保留list1中不匹配的列表(例如:['C', 16, 'F', 50, 60])。 如何在python3函数中实现这一点?我想要一个简单而直接的函数。非常感谢您抽出时间!你知道吗


Tags: 函数示例列表规则格式时间python3list2
3条回答

下面是一种将列表转换为dict的方法,它利用了list2中的重叠项只会覆盖它们的list1对应项的事实:

combined_list = list1 + list2
final_dict = {tuple(i[:2]):tuple(i[2:]) for i in combined_list}
> {('A', 14): ('Y', 0, 200),
  ('B', 15): ('M', 0, 400),
  ('C', 16): ('F', 50, 60),
  ('C', 17): ('G', 0, 600)}
merged_list = [list(k) + list (final_dict[k]) for k in final_dict]
> [['C', 16, 'F', 50, 60],
   ['B', 15, 'M', 0, 400],
   ['C', 17, 'G', 0, 600],
   ['A', 14, 'Y', 0, 200]]

如果列表的顺序很重要,您可以只在末尾排序,或者首先使用OrderedDict创建合并。你知道吗

要同时处理这两个列表,可以使用zip()Docs Here

例如:

for value in zip(list1, list2):
       print (value[0], value[1])

将返回:

['A', 14, 'I', 10, 20] ['A', 14, 'Y', 0, 200] 
['B', 15, 'S', 30, 40] ['B', 15, 'M', 0, 400]
['C', 16, 'F', 50, 60] ['C', 17, 'G', 0, 600]

因此,使用zip可以同时处理两个列表。你知道吗

可以在函数中使用if语句应用所有规则。你知道吗

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

相关问题 更多 >