访问itertools.product Python返回的列表列表

时间:2013-10-01 04:58:45

标签: python python-3.x

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

3 个答案:

答案 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))