访问返回列表的列表itertools.productPython

2024-09-24 06:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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中的大量元素,这将导致内存错误

上述代码的目的是,为了得到关联值最大的组合

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

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

代码片段(穷举法) CodeLink


Tags: 对象内存代码目的脚本元素错误product
3条回答

您只对函数中具有最大值的项感兴趣,然后执行以下操作:

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

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

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

如果您一次需要有多个项,那么您需要解决如何缓存这些项而不必自己获得MemoryError。在

您可以通过对产品的一次迭代找到得分最高的项,如下所示

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

如果你需要分数和项目

^{pr2}$

相关问题 更多 >