例如,我有一个数组,它看起来像下面的[[1, 2, 3], [4, 5], [7, 8, 9]]
我的任务是显示数组中的所有组合,如下所示:
1-4-7, 1-4-8, 1-4-9
1-5-7, 1-5-8, 1-5-9
2-4-7, 2-4-8, 2-4-9
2-5-7, 2-5-8, 2-5-9
3-4-7, 3-4-8, 3-4-9
3-5-7, 3-5-8, 3-5-9我见过很多不同的解决方案,就像这样-- How to get all possible combinations of a list’s elements?,但这不是我想要的
外接程序:数组不能被修改
发布于 2021-06-28 09:35:41
由于您正在寻找列表的笛卡儿积,请使用itertools.product
from itertools import product
data = [[1, 2, 3], [4, 5], [7, 8, 9]]
for p in product(*data):
print("-".join(map(str, p)))
1-4-7
1-4-8
1-4-9
1-5-7
# ...
3-4-9
3-5-7
3-5-8
3-5-9发布于 2021-06-28 09:43:13
如果您不想像链接的答案那样使用itertools,下面这样的内容应该可以工作:
首先,维护一个索引列表,我们称之为positions,它表示当前在每个内部列表中查看的元素,并将所有这些索引初始化为0。在您的示例中,这将类似于[0,0,0]
打印/存储这些索引产生的组合。这里是1,4,7。
增加列表中的最后一个索引。如果这个索引现在是它对应的列表的大小(在示例中,对于最后一个索引,那将是3,对于第二个,最后一个,2等等)。然后将其重置为0,然后依次递增下一个索引。对positions中的所有值执行此检查
重复此过程,每次打印/存储结果组合,直到positions中的第一个索引达到列表列表中第一个列表的大小,此时您就完成了
https://stackoverflow.com/questions/68160908
复制相似问题