Python 生成包含列表的所有组合的新列表

Python 生成包含列表的所有组合的新列表,python,python-3.x,Python,Python 3.x,基本上我想要一些被邀请进来的东西, 但仅对循环使用while或/和。换句话说,不使用itertools或递归 我知道以前有人问过很多类似的问题,但不幸的是,我找不到理想的答案。我一直在寻找一些同时使用循环和递归的解决方案,但当我试图将它们转换为循环时,我发现它对我不起作用。我曾想过将for循环放入while循环中,但它的工作原理与使用递归不同,因为整个for循环在另一个while循环开始之前完成 我已经坚持了几个小时,非常感谢您的帮助/提示。不过我正在使用Python 3 好吧,如果您要求实现只

基本上我想要一些被邀请进来的东西, 但仅对循环使用
while
或/和
。换句话说,不使用
itertools
或递归

我知道以前有人问过很多类似的问题,但不幸的是,我找不到理想的答案。我一直在寻找一些同时使用循环和递归的解决方案,但当我试图将它们转换为循环时,我发现它对我不起作用。我曾想过将
for
循环放入
while
循环中,但它的工作原理与使用递归不同,因为整个
for
循环在另一个
while
循环开始之前完成


我已经坚持了几个小时,非常感谢您的帮助/提示。不过我正在使用Python 3

好吧,如果您要求实现只用于循环的
itertools.product
,您将在


假设args总是,有没有办法改变它,这样就不用tuple和yield了?@slopys1324当然可以。使用
list
而不是
tuple
,将最后一个for循环的结果累积到一个列表中,并返回它而不是使用yield。可能是最后一个问题。是否有一种等效的方法来执行
[x+[y]for x in result for y in pool]
而不是将两个for循环放在一行上?谢谢我自己也试过了,但出于某种原因,它最终会出现一个无限循环。
def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)