创建一个由两个列表构成的列表列表

时间:2018-07-16 19:51:51

标签: python python-3.x list nested-lists

我有两个形状如下的列表:

listA
[[778, 606],
 [2115, 2049],
 [3361, 3183],
 [4512, 4179]]

listB
[[-128, -4],
 [-38, 38],
 [-15, 110],
 [-105, 185]]

我想从listA和listB中获取第一个元素,以创建将进入另一个列表的列表。

所以我想要类似以下的输出:

 new_list
 [[[778, 606],[-128, -4]], 
 [[2115, 2049],[-38, 38]], 
 [[3361, 3183],[-15, 110]], 
 [[4512, 4179],[-105, 185]]]

关于如何正确构造列表理解的想法,或者也许有更好的即用型方法?


我想我在如何追加列表的逻辑上苦苦挣扎。

我尝试了以下操作:

x = []
for i,j in [(i,j) for i in listA for j in listB]:
x.append(i)
x.append(j)

导致:

[[778, 606],
 [-128, -4],
 [778, 606],
 [-38, 38],
 [778, 606],
 [-15, 110],
 [778, 606],
 [-105, 185]]

这不是我想要的。所以我也尝试过:

y = [(i,j) for i in listA for j in listB]

导致:

    [([778, 606], [-128, -4]),
     ([778, 606], [-38, 38]),
     ([778, 606], [-15, 110]),
     ([778, 606], [-105, 185]),
     ([2115, 2049], [-128, -4]),
     ([2115, 2049], [-38, 38]),
     ([2115, 2049], [-15, 110]),
     ([2115, 2049], [-105, 185]),
     ([3361, 3183], [-128, -4]),
     ([3361, 3183], [-38, 38]),
     ([3361, 3183], [-15, 110]),
     ([3361, 3183], [-105, 185]),
     ([4512, 4179], [-128, -4]),
     ([4512, 4179], [-38, 38]),
     ([4512, 4179], [-15, 110]),
     ([4512, 4179], [-105, 185])]

1 个答案:

答案 0 :(得分:1)

我会为此使用zip。这是一次很好的循环浏览两个列表并获取它们两个值的好方法。

new_list = [list(c) for c in zip(listA, listB)]
new_list = [*zip(listA, listB)] #if tuples are fine.

输出:

[[[778, 606], [-128, -4]], 
[[2115, 2049], [-38, 38]], 
[[3361, 3183], [-15, 110]], 
[[4512, 4179], [-105, 185]]]