在Python中迭代可变数量的迭代

时间:2013-08-01 22:55:13

标签: python recursion iterator

案例:我需要找出三个对象组合是否符合规则。

为简单起见,假设给定序列是由生成器函数吐出的任何项目组合,则满足规则。生成器处理池中的项目将在其每个实例中弹出,并且不会总是产生相同的项目/顺序,因此构建项目列表并使用itertools.combinations之类的内容生成组合不会工作

现在我的功能相当于:

def is_match_found(sequence):

  items1 = items_generator()

  for item1 in items1:
    items2 = items_generator()

    for item2 in items2:
      items3 = items_generator()

      for item3 in items3:
        if sequence in [item1, item2, item3]:
          return True

  return False

但我预见到未来我将需要查看生成器吐出的n个对象的组合是否满足规则。

我觉得好像一个带有n参数的函数实现递归for循环可能是解决这个问题的一步,但是当我试图找到一个有效的问题时,我的大脑就会破裂。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

对于N个项目的排列:

def is_match_found(sequence):
    for itemList in itertools.product(list(item_generator()), repeat=N):
        if sequence in itemList:
            return True
    return False

答案 1 :(得分:0)

如果您正在寻找“具有n参数的函数来实现递归for循环”,并且通过“递归”实际上意味着“嵌套”......那么它已经存在:{{ 3}}。事实上,简短描述是:

  

笛卡尔积,相当于嵌套的for循环

但它没有n参数;它有一个iterables参数,允许您根据需要指定尽可能多的单独迭代。如果您只想嵌套相同的可迭代n次,则可以传递同一个迭代的n个副本列表...但您也可以使用repeat关键字来指定。正如文档所说:

  

product(A, repeat=4)表示与product(A, A, A, A)相同。