案例:我需要找出三个对象组合是否符合规则。
为简单起见,假设给定序列是由生成器函数吐出的任何项目组合,则满足规则。生成器处理池中的项目将在其每个实例中弹出,并且不会总是产生相同的项目/顺序,因此构建项目列表并使用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
循环可能是解决这个问题的一步,但是当我试图找到一个有效的问题时,我的大脑就会破裂。
有人能指出我正确的方向吗?
答案 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)
相同。