如何在不有效改变位置的情况下获得所有可能的组合?

How to get every possible combination without changing position efficiently?

我有一个二维列表,行号为 60,列号不固定。此处,行号表示位置。如何在不改变位置的情况下获得所有可能的组合?

我举个例子说明一下: 让我们缩短理解时间。假设行号是 3 而不是 60。 名单:

list_val = [[1, 2, 3], [2, 3], [5]]

我要获取组合:

{1, 2, 5}, {1, 3, 5}, {2, 2, 5}, {2, 3, 5}, {3, 2, 5}, {3, 3, 5}

对于三个,写三个嵌套循环应该很容易。但是对于60来说,写60个嵌套循环可不是个好主意。在python中有没有更高效的代码编写方式?

您正在寻找的是 itertools.product(),它以一种相当有效的方式实现它,这样您就不需要重新发明它,而且它适用于大型迭代器。

这是为什么?它是用 C (1, 2) 实现的,因此性能比标准的 pure-Python 循环实现更快,除非您使用可以达到相当速度的技巧。

不要忘记解压具有要与 star/asterisk (*) 一起用于函数的可迭代对象的可迭代对象,或者为其提供多个变量 (product(one, two, three)),否则它的行为会有所不同。

>>> from itertools import product
>>> list(product(*[[1, 2, 3], [2,3], [5]]))
[(1, 2, 5), (1, 3, 5), (2, 2, 5), (2, 3, 5), (3, 2, 5), (3, 3, 5)]
>>>