将两个Python列表与部分空的子列表组合

时间:2015-12-09 19:07:39

标签: python list list-comprehension

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

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

另外我有另一个相同长度的列表(所有整数):

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

现在我想得到一个元组的元组列表,其中我的嵌套列表元素不为空。实际上每个元组都应包含两个列表中的元素。

例如,mynestedlist中的第一个非空列表是第4个[4,10]。其他列表中的相应元素为32.此信息应该分为两个元组(32,4)(32,10)。因此,如果mynestedlist子列表中有多个条目,则应创建多个元组。 最后输出应为[(32,4),(32,10),(21,4),(12,10)]。如何以有效的方式完成这项工作?

所以我到目前为止尝试的是

*)使用子列表的总和

检查子列表是否为空
[sum(x)>0 for x in mynestedlist]

*)将两个列表组合成字典

combined_list = dict(zip(otherlist,mynestedlist))

我不确定这是否可行?

4 个答案:

答案 0 :(得分:4)

这实际上非常简单,列表理解,

>>> [(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,则可以使用长列表。

答案 1 :(得分: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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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