python-3.x 两个嵌套列表合成一个列表

3lxsmp7m  于 2023-03-13  发布在  Python
关注(0)|答案(4)|浏览(177)

下面是2个列表

list1 = [[1,2],[3,4]]
list2 = [[11,22],[33,44]]

我试过了

output =list(tuple(zip(i, j)) for i, j in zip(list1, list2))

但是我的输出并不像期望的那样。

[((1, 11), (2, 22)), ((3, 33), (4, 44))]

我要一对一的对应如输出如

[(1,11),(2,22),(3,33),(4,44)]

我该怎么补救呢?

vxf3dgd4

vxf3dgd41#

你的原始代码生成了一个元组的元组列表,因为你有一个外部的list(),一个tuple(),和一个zip(),它们生成了实际的元组--你想去掉中间的tuple(),取而代之的是只有一个列表解析,它捕获了zip(i, j)生成的所有元组。
可以通过在解析中放入两个for语句(不在tuple()调用中 Package )来实现这一点:

>>> list1 = [[1,2],[3,4]]
>>> list2 = [[11,22],[33,44]]
>>> [z for i, j in zip(list1, list2) for z in zip(i, j)]
[(1, 11), (2, 22), (3, 33), (4, 44)]
r6l8ljro

r6l8ljro2#

你也可以像这样用一个for循环:

k=[]
for x,y in enumerate(list1):
    k.append(tuple(zip(y,list2[x]))[0])
    k.append(tuple(zip(y,list2[x]))[1])

#k
[(1, 11), (2, 22), (3, 33), (4, 44)]
mzillmmw

mzillmmw3#

使用Numpy

试试这个 numpy 解决方案-

import numpy as np

np.array(list1+list2).reshape(2,-1).T.tolist()
[[1, 11], [2, 22], [3, 33], [4, 44]]

如果您需要内部列表是元组,请执行以下变体。
一个二个一个一个

rta7y2nd

rta7y2nd4#

两个嵌套列表交集的python程序import itertools import functools

定义全球通信基础设施(第一阶段,第二阶段):

temp1 = functools.reduce(lambda a, b: set(a).union(set(b)), lst1)
temp2 = functools.reduce(lambda a, b: set(a).union(set(b)), lst2)
 
lst3 = [list(set(a).intersection(set(b)))
       for a, b in itertools.product(lst1, lst2)
       if len(set(a).intersection(set(b))) != 0]
 
lst3.extend([x] for x in temp1.symmetric_difference(temp2))
 
return lst3

希望对你有帮助。

相关问题