如何将两个列表列表组合到一个新列表中

时间:2015-06-15 06:50:20

标签: python list

我有这样的问题。我有两个列表,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)

但是,输出为None。

感谢任何有用的信息。谢谢。

顺便说一下,我试图替换"追加"用简单的" +"。输出是一个列表,其中的元素不是列表。

5 个答案:

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

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

答案 2 :(得分: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']]]

只需使用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'])]    

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

答案 4 :(得分:0)

您可以使用check here for more information来实现此目的。

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 [,repeat])

它返回输入迭代的笛卡尔乘积
例如
 product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy