Python脚本,如下所示,
>>> a=[[1,2,3],[4,5,6],[7,8,9,10]]
>>> b=itertools.product(*a)
>>> b
现在b将包含以下元素,
[(1,4,7),(1,4,9), .......]
所有组合
如何访问itertools.product返回的此对象的元素,
如果执行list(itertools.product(*a))
,则a
中的大量元素会导致内存错误
上述代码的目标是,获得最大关联值的组合,
此值在第一次迭代时计算,并存储在score []中, 基于和argmax(得分)的索引,我想从对象中检索特定的组合
再次迭代这样的索引元素我会花费多少钱?
Code Snippet,(详尽的方法) CodeLink
答案 0 :(得分:2)
通常,itertools背后的想法是你迭代返回的对象:
for item in itertools.product(*a):
do_something(item)
如果您需要一次拥有多个项目,那么您需要了解如何在不获得MemoryError
的情况下缓存这些项目。
答案 1 :(得分:1)
您可以使用产品上的单次迭代找到具有最高分数的项目,例如
item = max(itertools.product(*a), key=score_func)
如果您需要得分和项目
score, item = max((score_func(i), i) for i in itertools.product(*a))
答案 2 :(得分:0)
您只对具有函数最大值的项感兴趣,然后执行以下操作:
max_item = None
for i in itertools.product(*a):
if not max_item:
# First loop
max_item = (somefunc(i),i)
continue
if max_item and max_item[1] < somefunc(i):
# This item's calulated value is the new max
max_item = (somefunc(i),i)
print('The maximum value is {} for the item {}'.format(*max_item))