如何通过能够递归地多次使用数字来创建 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)]
例如,我有数字 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)]