python-3.x - 两个或多个列表的所有可能组合(包括所有子集组合)
问题描述
我搜索了网络,但找不到任何东西。我正在尝试获取所有可能的组合,包括两个列表的所有子集组合(最好是 n 个列表)。所有组合都应包括每个列表中的至少一项。
list_1 = [1,2,3]
list_2 = [5,6]
output = [
[1,5], [1,6], [2,5], [2,6], [3,5], [3,6],
[1,2,5], [1,2,6], [1,3,5], [1,3,6], [2,3,5], [2,3,6], [1,5,6], [2,5,6], [3,5,6],
[1,2,3,5], [1,2,3,6],
[1,2,3,5,6]
]
我所能得到的只是像 [1,5], [1,6], .. 这样的配对组合,通过使用
combs = list(itertools.combinations(itertools.chain(*ls_filter_columns), cnt))
实现这一目标的pythonic方式是什么?
解决方案
这是一种方法:
from itertools import combinations, product
def non_empties(items):
"""returns nonempty subsets of list items"""
subsets = []
n = len(items)
for i in range(1,n+1):
subsets.extend(combinations(items,i))
return subsets
list_1 = [1,2,3]
list_2 = [5,6]
combs = [list(p) + list(q) for p,q in product(non_empties(list_1),non_empties(list_2))]
print(combs)
输出:
[[1, 5], [1, 6], [1, 5, 6], [2, 5], [2, 6], [2, 5, 6], [3, 5], [3, 6], [3, 5, 6], [1, 2, 5], [1, 2, 6], [1, 2, 5, 6], [1, 3, 5], [1, 3, 6], [1, 3, 5, 6], [2, 3, 5], [2, 3, 6], [2, 3, 5, 6], [1, 2, 3, 5], [1, 2, 3, 6], [1, 2, 3, 5, 6]]
哪个元素比您提供的输出更多,但我怀疑您的预期输出有误。请注意,我的代码可能无法正确处理两个列表存在非空交集的情况。再说一次,它可能 - 您没有指定在这种情况下预期的输出应该是什么。
推荐阅读
- c++ - 模板参数推导/替换因 std::set 失败
- html - SSRS 文本框的 HTML 格式
- node.js - 如何在服务器上保存 JWKBaseKeyObject 并检索
- azure-powershell - 如何使用 PowerShell 为特定资源和特定策略获取 Azure Policy 合规性报告?
- reactjs - 无法引用 id,因为代码尚未返回
- python - 一旦在文件 aka hold.txt PYTHON3 中找到日期,代码就不会继续下一个输入
- react-native - 垂直平面列表上水平平面列表项的焦点旁白
- google-chrome-extension - 用于转发电子邮件的 Chrome 扩展程序
- typescript - Typescript AMD 模块 - 脚本未运行
- python - 如何从另一个 docker 容器中使用 python?