2015-06-15 132 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

相关问题