Python新手求助:如何基于子列表首元素合并两个列表的列表
解决基于子列表首元素合并两个列表的问题
嘿,作为Python新手能自己动手尝试实现需求已经超棒啦!看你现在的输出应该是想要把两个列表里对应子列表的内容合并成一个扁平的子列表,而不是把整个first_list的子列表嵌套进去对吧?那咱们来一步步调整你的代码~
先看你当前代码的问题
你写的temp = [first_list[x], second_list[x][1]]是把first_list的整个子列表作为新列表的第一个元素,再把第二个值加进去,所以才会出现[[['aaa', 551, 10972], 240], ...]这种嵌套结构。
方法1:修改你的原有代码
只需要先复制first_list的子列表,再把第二个列表对应的值追加进去就行:
first_list = [['aaa', 551, 10972], ['bbb', 552, 10872], ['ccc', 553, 11103], ['ddd', 554, 10912]] second_list = [['aaa', 240], ['bbb', 120], ['ccc', 325], ['ddd', 270]] join_list = [] for x in range(0, len(first_list)): # 复制原有的子列表,避免修改原列表 temp = first_list[x].copy() # 追加第二个列表对应位置的第二个元素 temp.append(second_list[x][1]) join_list.append(temp) print(join_list)
输出结果就是你想要的:
[['aaa', 551, 10972, 240], ['bbb', 552, 10872, 120], ['ccc', 553, 11103, 325], ['ddd', 554, 10912, 270]]
方法2:更Pythonic的遍历方式(推荐)
用zip()函数可以同时遍历两个列表的子元素,不用手动处理索引,代码更简洁:
join_list = [] for first_sub, second_sub in zip(first_list, second_list): # 直接合并两个部分:原有的子列表 + 第二个子列表的第二个元素组成的列表 combined = first_sub + [second_sub[1]] join_list.append(combined)
甚至可以用列表推导式一行完成:
join_list = [first_sub + [second_sub[1]] for first_sub, second_sub in zip(first_list, second_list)]
方法3:更健壮的字典映射法(适用于子列表顺序不一致的情况)
如果first_list和second_list的子列表顺序可能不对应,但第一个元素是唯一标识的话,用字典映射会更稳妥:
# 先把second_list转换成字典,键是子列表的第一个元素,值是第二个元素 second_dict = {sub[0]: sub[1] for sub in second_list} # 遍历first_list,根据首元素从字典取值合并 join_list = [sub + [second_dict[sub[0]]] for sub in first_list]
这种方法哪怕两个列表的子列表顺序打乱,只要首元素匹配,就能正确合并~
内容的提问来源于stack exchange,提问作者YusufUMS
相关产品推荐
相关产品推荐

