假设我有这个列表有3个项目,每个项目还包含3个项目:
list = [ [1,2,3], [4,5,6], [7,8,9] ]
我想创建一个3 ** 2 = 9的列表,其中包含所有项目的组合,这意味着
(x,y,z)与[1,4,7]
中的x,[2,5,8]
中的y和[3,6,9]
中的z的组合,因此我将使用 list comprehension 像这样:
new_list =[(x,y,z) for x in [1,2,3] for y in [4,5,6] for z in [7,8,9]]
这是一种“手动”方法。但是如果我想在我的代码中使用每次长度不同的大型列表,让我们说一个20D列表(20个项目,每个项目包含20个项目),我该如何创建一般类型的代码?
答案 0 :(得分:4)
您可以使用itertools.product
,但结果将是3 3 = 27 item:
>>> from itertools import product
>>> lst = [ [1,2,3], [4,5,6], [7,8,9] ]
>>>
>>> list(product(*lst))
[(1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 5, 7), (1, 5, 8), (1, 5, 9), (1, 6, 7), (1, 6, 8), (1, 6, 9), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 5, 7), (2, 5, 8), (2, 5, 9), (2, 6, 7), (2, 6, 8), (2, 6, 9), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 5, 7), (3, 5, 8), (3, 5, 9), (3, 6, 7), (3, 6, 8), (3, 6, 9)]
请注意,在处理大型数据集时,无需将结果转换为列表。由于product
返回一个迭代器,你可以简单地循环产品并访问项目。