首页 > 解决方案 > 迭代工具 Python

问题描述

有什么方法可以使用 itertools 产品功能,该功能逐步返回列表的每个组合?

例如: itertools.product(*mylist) -> 解决方案应该返回列表的第一个组合,然后是第二个等等。

标签: pythonitertools

解决方案


正如@ggorlen 所解释的,itertools.product(...)返回一个迭代器。例如,如果您有

import itertools
mylist = [('Hello','Hi'),('Andy','Betty')]
iterator = itertools.product(*mylist)

next(iterator)或者iterator.__next__()将评估到'Hello Andy'您第一次调用它们时,例如。当你下次调用时,它会在引发错误之前next(iterator)返回'Hello Betty', then'Hi Andy'和 finally 。'Hi Betty'StopIteration

如果您对 a 更满意,您也可以将 a 转换iteratorlistwith ,但如果您只需要前几个值并且很大,那么这将非常低效,可能值得花时间熟悉迭代器。list(iterator)listmylist

请考虑您是否真的只是在迭代iterator。如果是这样,只需使用

for combination in iterator:
    pass # Body of loop

即使您只需要第一个n元素并且n很大,您也可以使用

for combination in itertools.islice(iterator, n):
    pass # Body of loop

推荐阅读