2015-06-15 167 views
0

我有這樣的問題。我有兩個列表,A和B,其中A=[[1,2],[3,4],[5,6]]B=[["a","b"],["c","d"]],我想從這兩個像如何將兩個列表的列表合併到一個新列表中

C = [ 
    [[1,2],["a","b"]], 
    [[3,4],["a","b"]], 
    [[1,2],["c","d"]], 
    [[3,4],["c","d"]] 
    ] 

我曾嘗試下面的代碼有一個新的列表:

A = [[1,2],[3,4]] 
B=[["a","b"],["c","d"]] 
for each in A: 
    for evey in B: 
     print each.append(evey) 

然而,輸出爲無。

任何有用的信息,表示讚賞。謝謝。

順便說一句,我試圖用簡單的「+」替換「附加」。輸出是一個列表,其中的元素不是列表。

+1

您正在打印'append'的返回值,即'None'。 – Maroun

+0

'A''' [5,6]'從哪裏去? –

回答

0

試試這個。您必須在每次迭代中追加每個元素。

result = [] 
for each in A: 
    for evey in B: 
     result.append([each,evey]) 
>>>result 
[[[1, 2], ['a', 'b']], 
[[1, 2], ['c', 'd']], 
[[3, 4], ['a', 'b']], 
[[3, 4], ['c', 'd']]] 

OR

只需使用itertools.product

>>>from itertools import product 
>>>list(product(A,B)) 
[([1, 2], ['a', 'b']), 
([1, 2], ['c', 'd']), 
([3, 4], ['a', 'b']), 
([3, 4], ['c', 'd'])]  
+0

非常感謝您的回覆。問題解決了。我用append方法困惑自己。謝謝。 –

1

這是一個辦法做到這一點:

A = [[1,2],[3,4]] 
B=[["a","b"],["c","d"]] 
C = zip(A,B) 

這裏的輸出是一個元組列表:

[([[1, 2], [3, 4]],), ([['a', 'b'], ['c', 'd']],)] 

如果你想列出的清單,你可以這樣做:

D = [list(i) for i in zip(A, B)] 

輸出:

[[[1, 2], ['a', 'b']], [[3, 4], ['c', 'd']]] 
+1

zip函數不能解決問題。它顯示'[([1,2],['a','b']),([3,4],['c','d'])]' – vasilenicusor

+0

感謝您的幫助。正如@vasilenicusor所說,它可能需要迭代來產生我想要的結果。其實,我發現另一個非常簡單的方法來解決它。只要使用:C = [x,y,對於A中的x對於B中的y] –

+0

@ThomasDing似乎我的答案'D'中的第二個輸出是這個[[[1,2],['a' ,'b']],[[3,4],['c','d']]]'是你想要的。順便說一句:你測試了你的解決方案嗎? –

2

這是在這裏找到答案:Get the cartesian product of a series of lists?

試試這個:

import itertools 

A = [[1,2],[3,4]] 
B = [["a","b"],["c","d"]] 
C = [] 

for element in itertools.product(A,B): 
    C.append(list(element)) 

print C 
+0

如果您認爲該問題是重複的,請投票結束。 –

+0

既然它是重複的,那你爲什麼回答它? – FallenAngel

+0

@FallenAngel:我沒有足夠的積分將它重複投票(我在這裏是新的)。 –

0

不打印的append()的返回值,試試這個:

A = [[1,2],[3,4]] B=[["a","b"],["c","d"]] C = [] for each in B: for evey in A: C.append([evey, each]) print C

+0

請您詳細說明您的答案,並添加關於您提供的解決方案的更多描述。 – abarisone

+0

@abarisone:感謝您的建議:-) – maliku

0

您可以使用itertools.product來實現這一目標。

import itertools 

list(itertools.product(A,B)) # gives the desired result  
[([1, 2], ['a', 'b']), 
([1, 2], ['c', 'd']), 
([3, 4], ['a', 'b']), 
([3, 4], ['c', 'd']), 
([5, 6], ['a', 'b']), 
([5, 6], ['c', 'd'])] 

itertools.product(* iterables [,重複])

它返回輸入的笛卡爾乘積iterables
EG。
product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy

相關問題