海量数据如何使用itertools产品
How to use itertools product with a huge data
我想用python中的1,2,3三个元素做一个81元组的列表。
我试图找到解决方案,然后我找到了这些有用的链接:
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 个元素。
您可以使用 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 以获取一些灵感。
我想用python中的1,2,3三个元素做一个81元组的列表。
我试图找到解决方案,然后我找到了这些有用的链接:
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 个元素。
您可以使用 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 以获取一些灵感。