2015-12-09 49 views
2

我有一個嵌套的名單(名單列表),其中每個子表可能包含一個或多個元素(整數),但有些甚至是空的:合併兩個Python列表和部分空的子列表

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

另外我有同樣長度的另一列表(所有整數):

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

現在我想獲得一個元組的組合列表的元素在我的嵌套列表元素不是空的。實際上每個元組都應該包含兩個列表中的元素。

例如mynestedlist中的第一個非空列表是第四個至少是[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

你打算做自己的東西嗎? http://stackoverflow.com/questions/34182181/filter-python-list-of-lists-by-another-list –

+0

stackoverflow不是一個代碼寫入服務。請舉例說明你已經嘗試了什麼,哪些不起作用,並且有人會盡力幫助你。 –

回答

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,並有較長的列表。

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)