我想使用三个元素列出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个。
答案 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获取一些灵感。