-1

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会导致内存错误

上述代码的目标是,获得具有最大关联值的组合,

这个值是在第一次迭代时计算出来的,它存储在分数 [] 中,基于 sum argmax(scores) 的索引,我想从对象中检索特定的组合

再次迭代索引 i 的这种元素会很昂贵吗?

代码片段,(详尽的方法) CodeLink

4

3 回答 3

2

通常, itertools 背后的想法是迭代返回的对象:

for item in itertools.product(*a):
    do_something(item)

如果您一次需要拥有多个项目,那么您需要弄清楚如何在不获取MemoryError自己的情况下缓存这些项目。

于 2013-10-01T05:00:34.857 回答
1

您可以像这样在产品上使用单次迭代找到得分最高的项目

item = max(itertools.product(*a), key=score_func)

如果您需要分数项目

score, item = max((score_func(i), i) for i in itertools.product(*a))
于 2013-10-01T05:44:53.460 回答
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))
于 2013-10-01T05:25:25.973 回答