如何使用包含大量数据的itertools产品

时间:2017-05-19 05:52:09

标签: python list product itertools

我想使用三个元素列出81元组,即python中的1,2,3。

我试图找到一个解决方案,然后我找到了这些有用的链接:

How to use itertools to compute all combinations with repeating elements?

Which itertools generator doesn't skip any combinations?

根据以上链接,我应该做以下

import itertools

list = []
for p in itertools.product(range(1, 3 + 1), repeat=81):
    list.append(p)

print(list)

但是,我的电脑挂了。我认为列表中的数据太多了。

我想知道是否有一个命令只打印列表中的前100个元素或列表中的第101个到第200个。

1 个答案:

答案 0 :(得分:3)

您可以使用itertools.islice

p = itertools.product(range(1, 3 + 1), repeat=81)
s = itertools.islice(p, 101, 200)
print(list(s))

然而,这将迭代所有元素,直到它到达切片的起始索引。因此,对于具有大量元素的迭代器结束的范围(您的3**81 = 443426488243037769948249630619149892803或者换句话说:太多而无法处理,更不用说存储),这将遇到类似的问题。

对于那些后来的范围,您必须手动计算第n个元素并从那里生成后继...请参阅How to select specific item from cartesian product without calculating every other item获取一些灵感。