如何合并两个嵌套列表并输出元组列表?

时间:2019-03-14 16:31:36

标签: python list nested zip tuples

我有两个嵌套列表,list_alist_b

list_a=[['a','b'],['c','d','e'],['f','g','f']]
list_b=[[5,7],[2,3,2],[4,7,8]]

我正在尝试生成list_c,这是将list_a中的每个元素与其在list_b中的对应元素合并的结果,例如list_a[1][1]list_b[1][1]list_a[1][2]list_b[1][2]等,以产生元组列表的列表。

list_c=[[('a',5),('b',7)],[('c',2),('d',3),('e',2)],[('f',4),('g',7),('f',8)]]

我已经尝试过:

list_c=[]
for list1 in list_a:
    for list2 in list_b:
        list_c.append(list(zip(list1,list2)))

但是输出的结果是原始列表中元素的所有可能组合的元组列表:

[[('a', 5), ('b', 7)], [('a', 2), ('b', 3)], 
 [('a', 4), ('b', 7)], [('c', 5), ('d', 7)],...
 [('f', 2), ('g', 3), ('f', 2)], 
 [('f', 4), ('g', 7), ('f', 8)]]

我觉得我已经接近正确的答案,但是缺少一些简单的东西。如何产生我要寻找的结构的list_c? (保留顺序很重要,因为我想用它来处理CSV文件)

这是对此处问题的扩展: Concatenate items in two nested lists to pairs in tuples

但是我一直找不到类似的问题,这些问题不涉及将结果列表展平为以下内容:

list_c=[('a',5),('b',7),('c',2),('d',3),('e',2),('f',4),('g',7),('f',8)]

4 个答案:

答案 0 :(得分:3)

您需要ziplist_a上的list_b,而不是嵌套的for循环(产品): 效果如下:

[list(zip(a,b)) for a,b in zip(list_a, list_b)]

换句话说:

result = []
for a, b in zip(list_a, list_b):
    result.append(list(zip(a,b)))

答案 1 :(得分:0)

使用列表理解

a=[['a','b'],['c','d','e'],['f','g','f']]
b=[[5,7],[2,3,2],[4,7,8]]

c = [list(zip(i,j)) for i,j in zip(a,b)]

print(c)

"""
output 


[[('a', 5), ('b', 7)],
 [('c', 2), ('d', 3), ('e', 2)],
 [('f', 4), ('g', 7), ('f', 8)]]

"""

使用lambda函数,可以通过

完成
d=list(map(lambda x,y:list(zip(x,y)),a,b))
print(d) 
"""
output 

[[('a', 5), ('b', 7)],
 [('c', 2), ('d', 3), ('e', 2)],
 [('f', 4), ('g', 7), ('f', 8)]]

"""

答案 2 :(得分:0)

list_c = []
for i, element_a in enumerate(list_a):
    element_b = list_b[i]
    merged_list = []
    for j in range(len(element_a)):
        merged_list.append((element_a[j], element_b[j]))
    list_c.append(merged_list)

为每个列表索引中的每个元素创建新的元组,并追加到主列表中

答案 3 :(得分:0)

由于已经采用了最好和更短的方法..,所以另一个选择具有很好的详细for循环:

list_c = []
for i, a in enumerate(list_a):
  tmp = []
  for j, b in enumerate(list_b[i]):
    tmp.append((a[j], b))
  list_c.append(tmp)

list_c
#=> [[('a', 5), ('b', 7)], [('c', 2), ('d', 3), ('e', 2)], [('f', 4), ('g', 7), ('f', 8)]]