在python中操作大型列表

时间:2016-02-13 20:11:28

标签: python list

假设我有这个列表有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个项目),我该如何创建一般类型的代码?

1 个答案:

答案 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返回一个迭代器,你可以简单地循环产品并访问项目。