根据http://docs.python.org/2/library/itertools.html#itertools.product以下功能相当于使用他们的库(我删除了一些我不需要的东西):
def product(*args):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
pools = map(tuple, args)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
在我的情况下,我正在传递产品功能 3 列表,但我需要添加一些条件检查,因此如果它们不符合要求,它不会将一个列表中的某些项目与另一个列表中的项目混合。所以我认为我需要做的是转换:
result = [x+[y] for x in result for y in pool]
进入“正常” FOR 循环(不知道如何引用它们),所以我可以添加几个 IF 检查来验证列表中的项目是否应该混合在一起。
主要让我感到困惑的是“x”正在遍历空的“结果”列表,但是在它迭代时会添加项目,所以我认为这对我来说是使转换为正常循环变得复杂的原因。
这是我的尝试之一:
def product(*args):
pools = map(tuple, args)
result = [[]]
for pool in pools:
for x in result:
for y in pool:
result.append(x+[y])
for prod in result:
yield tuple(prod)
任何帮助是极大的赞赏!