批量itertools.product

时间:2019-07-23 21:08:32

标签: python itertools

我正在使用itertools.product()来获取列表中所有子列表的笛卡尔积。

arr = [[0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
result = itertools.product(*arr)

但是,arr可以是一个非常大的对象(2 <= len(arr) <= 500),因此result可以更大。

那么,有什么办法可以批量执行此操作?或以其他任何方式占用对象较少的内存?

1 个答案:

答案 0 :(得分:1)

ID Pair_ID Sim_Value 1 1 1.00 1 2 8.33 . . . . 2 1 8.33 之所以已经有效,是因为它返回一个迭代器:其itertools.product的内存复杂性,其中O(n)是列表的大小。

您也可以使用python文档上itertools recipes section中定义的函数n代替powerset

itertools.product

def powerset(iterable): s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) -> powerset([1,2,3])


但是,由于幂集的基数为() (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3),因此迭代powerset上所有项目的算法的时间复杂度为O(2^n)

结论是,如果2^n大,您将无法遍历大小为n的列表的幂集中的所有项目