如何通过能够递归地多次使用数字来创建 n 个数字的所有组合

how to create all combinations of n numbers by being able to use numbers multiple times recursively

例如,我有数字 0 和 255。我想要这样的组合

[[0, 0], [0, 255], [255, 0], [255, 255]]

我当前的代码如下所示,其中“a”是数字列表,可以是 2 个或更多。

def combinations(a):
    if len(a) == 0:
        return [[]]
    final = []
    for i in combinations(a[1:]):
        final += [i, i+[a[0]]]
    return final

但它给出了这个输出 [[], [0], [255], [255, 0]]

我正在寻找一种不使用任何库的递归解决方法。

您可以为此使用 itertools:

from itertools import product
lst = [0, 255]
[p for p in product(lst, repeat=2)]
# [(0, 0), (0, 255), (255, 0), (255, 255)]

既然不想导入库,也可以查阅itertools的文档,直接使用函数:

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)


lst = [0, 255]
[p for p in product(lst, repeat=2)]