如何通过能够递归地多次使用数字来创建n个数字的所有组合[重复]
Posted
技术标签:
【中文标题】如何通过能够递归地多次使用数字来创建n个数字的所有组合[重复]【英文标题】:how to create all combinations of n numbers by being able to use numbers multiple times recursively [duplicate] 【发布时间】:2022-01-19 23:34:48 【问题描述】:例如,我有数字 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]]
我正在寻找一种在不使用任何库的情况下递归解决它的方法。
【问题讨论】:
如果您的列表是 [0, 255] 那么 [0,0] 和 [255, 255] 不是该列表中的组合 @d_kennetz 那么他们叫什么 函数可以接收任意大小的列表吗? @EduardoTolmasquim 是的,这意味着组合的数量可能会很大。 所以返回的列表的大小与可能值的列表的大小相同吗?还是在您的示例中这纯粹是巧合? 【参考方案1】:您可以为此使用 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)]
【讨论】:
以上是关于如何通过能够递归地多次使用数字来创建n个数字的所有组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章