如何通过附加过滤从多个列表中获取所有组合?
How to get all combinations from multiple lists with additional filtering?
a = [[1,2,3,4],[2,3,4,5],[5,6,7,8],[4,3,2,3]]
output: (1,2,5,4),(1,2,5,3),(1,2,5,2)...
我有多个列表,我试图找到与上述代码类似的所有可能组合。但是由于列表的数量和列表中项目的数量,我的电脑无法处理它。所以我想知道是否有一种方法可以通过将所有项目(数字)加在一起来过滤掉一些组合。例如:(1,2,5,4) = 12;然后,如果该列表总数低于 15,则删除该列表并继续下一个组合。在我得到所有的组合之后我无论如何都必须做这样的事情所以我想为什么不早点做。
我生成所有可能组合的代码:
list(itertools.product(*a))
关于如何实现此过滤概念的任何想法?
您可以使用列表理解:
from itertools import product
a = [[1,2,3,4],[2,3,4,5],[5,6,7,8],[4,3,2,3]]
l = [e for e in product(*a) if sum(e) > 15]
但是请注意,初始产品的生成可能是瓶颈。如果您的元素太多(在您的示例中只有 256 个),您的计算机可能永远无法生成所有元素,并且过滤不会改变任何内容。
a = [[1,2,3,4],[2,3,4,5],[5,6,7,8],[4,3,2,3]]
output: (1,2,5,4),(1,2,5,3),(1,2,5,2)...
我有多个列表,我试图找到与上述代码类似的所有可能组合。但是由于列表的数量和列表中项目的数量,我的电脑无法处理它。所以我想知道是否有一种方法可以通过将所有项目(数字)加在一起来过滤掉一些组合。例如:(1,2,5,4) = 12;然后,如果该列表总数低于 15,则删除该列表并继续下一个组合。在我得到所有的组合之后我无论如何都必须做这样的事情所以我想为什么不早点做。
我生成所有可能组合的代码:
list(itertools.product(*a))
关于如何实现此过滤概念的任何想法?
您可以使用列表理解:
from itertools import product
a = [[1,2,3,4],[2,3,4,5],[5,6,7,8],[4,3,2,3]]
l = [e for e in product(*a) if sum(e) > 15]
但是请注意,初始产品的生成可能是瓶颈。如果您的元素太多(在您的示例中只有 256 个),您的计算机可能永远无法生成所有元素,并且过滤不会改变任何内容。