Python中如何合并三个不同列表的嵌套子列表对应元素
多列表按位置合并为嵌套元组列表实现方案
原始输入与预期输出
你定义的三个原始列表如下:
A = [["a", "b", "c"],["f", "b", "a"]] numbers = [[1, 2 ,3], [1, 2, 3]] frequency = [[0.2, 0.5, 0.7], [0.1, 0.8, 0.9]]
预期得到的合并结果结构:
comb = [[("a",1,0.2), ("b",2,0.5), ("c",3,0.7)],[("f",1,0.1), ("b",2,0.8), ("a",3,0.9)]]
错误原因说明
你用join方法实现不了是方法选错了:join是字符串专属方法,作用是把多个字符串按指定分隔符拼接成一整个字符串,既不能跨列表按位置匹配对应元素,也没法生成嵌套元组的结构,完全不适配这个需求。
正确实现代码
这个需求的核心是双层按位置打包元素:第一层先把三个大列表里同索引的子列表归为一组,第二层把每组里三个子列表同索引的元素打包成元组,用Python内置的zip函数就能快速实现按位置打包的逻辑。
- 可读性更好的普通循环写法:
comb = [] # 同时遍历三个大列表中位置一一对应的子列表 for sub_a, sub_num, sub_freq in zip(A, numbers, frequency): # 把三个子列表同位置的三个元素打包为元组,组成当前子列表 current_sub = [ (a, num, freq) for a, num, freq in zip(sub_a, sub_num, sub_freq) ] comb.append(current_sub)
- 简洁的列表推导式写法:
comb = [ [tuple(item_group) for item_group in zip(sub_a, sub_num, sub_freq)] for sub_a, sub_num, sub_freq in zip(A, numbers, frequency) ]
结果校验
运行上述代码后打印comb,输出结果和预期完全一致:
[[('a', 1, 0.2), ('b', 2, 0.5), ('c', 3, 0.7)], [('f', 1, 0.1), ('b', 2, 0.8), ('a', 3, 0.9)]]
内容的提问来源于stack exchange,提问作者fc27
相关产品推荐
相关产品推荐

