合并两个Python列表,其中包含部分为空的子列表。

3

我有一个嵌套列表(列表的列表),每个子列表可能包含一个或多个元素(整数),但有些甚至是空的:

mynestedlist = [[], [], [], [4,10], [4], [10]]

此外,我还有另一个与之同长度的列表(全部为整数):

otherlist = [2,4,14,32,21,12]

现在我想获得一个组合列表,其中嵌套列表元素不为空。实际上,每个元组应包含两个列表中的元素。 例如,mynestedlist 中第一个非空列表是第四个,即[4,10]。另一个列表中对应的元素是32。这些信息应该转换为两个元组 (32,4)(32,10)。因此,如果子列表中有多个条目,则应创建多个元组。 最后输出应为 [(32,4),(32,10),(21,4),(12,10)]。如何以有效的方式完成此操作?
所以我尝试过的是检查子列表是否为空,使用子列表之和。
[sum(x)>0 for x in mynestedlist]

*) 将这两个列表合并成一个字典

combined_list = dict(zip(otherlist,mynestedlist))

我不确定这是否是正确的方法?


你打算独立完成一些事情吗?https://dev59.com/M5Hea4cB1Zd3GeqPvOLN - Karoly Horvath
StackOverflow不是一个代码编写服务。请提供您尝试过的示例和出现问题的地方,有人会尝试帮助您。 - Chad S.
4个回答

6

使用列表推导式实现这个其实非常简单,

>>> [(b, e) for a, b in zip(mynestedlist, otherlist) for e in a]
[(32, 4), (32, 10), (21, 4), (12, 10)]

如果你使用的是Python 2.x,并且有长列表,你可以使用itertools.izip


0

你可以用两个简单的循环来实现这个。我相信这是最有效率的方法了。

result = [] 
A = [2,4,14,32,21,12]
B = [[], [], [], [4,10], [4], [10]]
for i in range(len(A)):
    for x in B[i]:
        result.append((A[i],x))
print result

0
[(otherlist[i], vv) for i, v in enumerate(mynestedlist) for vv in v]

0
out = []
for a, b in zip(mynestedlist, otherlist):
     for ele in a:
        out.append((b, ele))
print(out)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接