我有一个嵌套列表(列表列表),其中每个子列表可能包含一个或多个元素(整数),但有些甚至是空的:
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))
我不确定这是否可行?
答案 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)