在python中操作大型列表



假设我有这个列表,其中包含 3 个项目,每个项目还包含 3 个项目:

list = [ [1,2,3], [4,5,6], [7,8,9] ]

我想创建一个 3**2 = 9 的列表,其中包含项目的所有组合,这意味着

(x,y,z) 与 x 在 [1,4,7] 中的组合,y 在 [2,5,8] 中,z 在[3,6,9]中的组合,所以我将使用这样的列表推导

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 多个项目),我如何创建通用类型的代码?

您可以使用

itertools.product但结果将是 33 = 27 项目 :

>>> 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返回一个迭代器,因此您可以简单地循环公开产品和访问项。

最新更新