python - 从平面列表中查找所有列表和子列表组合
问题描述
我试图找到一种优雅的方式来从初始平面列表中生成所有可能的组合。
例如:
[在:]
l = ["aaa", "bbb", "ccc"]
[出去:]
[["aaa"], ["bbb"], ["ccc"]]
[["aaa", "bbb"], ["ccc"]]
[["aaa", "ccc"], ["bbb"]]
[["bbb", "ccc"], ["aaa"]]
[["aaa", "bbb", "ccc"]]
正如你在这里看到的,顺序对我来说并不重要。所以我会避免获得这种情况:
[["aaa"], ["bbb"], ["ccc"]]
[["bbb"], ["aaa"], ["ccc"]]
...
[["ccc"], ["aaa"], ["bbb"]]
我的输出列表的每个子列表也必须包含我的初始列表的每个元素。
我找不到任何明显的解决方案itertools.combination()
谢谢
解决方案
问题很模糊,我认为您正在寻找的是设置分区:
def partition(collection):
if len(collection) == 1:
yield [ collection ]
return
first = collection[0]
for smaller in partition(collection[1:]):
# insert `first` in each of the subpartition's subsets
for n, subset in enumerate(smaller):
yield smaller[:n] + [[ first ] + subset] + smaller[n+1:]
# put `first` in its own subset
yield [ [ first ] ] + smaller
something = ['a', 'b', 'c']
for n, p in enumerate(partition(something), 1):
print(n, sorted(p))
输出:
1 [['a', 'b', 'c']]
2 [['a'], ['b', 'c']]
3 [['a', 'b'], ['c']]
4 [['a', 'c'], ['b']]
5 [['a'], ['b'], ['c']]
推荐阅读
- python - 无法解析剩余部分:来自 'sobj.id==obj.id' 的 '==obj.id'
- reporting-services - 我如何在导航中的 ssrs 报告中使用不同年份的月份对客户条目进行分组
- ios - 键盘高度在 Swift 中无法正常工作
- python - check_balance() 函数没有给出正确的值/值没有被存储
- php - AH00124:由于可能的配置错误,请求超出了 10 个内部重定向的限制 - APACHE LOG
- angular - Angular 9 - 基于身份验证更改复选框值
- java - 将复杂的 Java 语句转换为 Python
- javascript - js:为什么选择“select tag”.target.type 返回“select-one”作为命名约定?
- python - Beautifulsoup find_all() 捕获太多文本
- apache-spark - 加载 Apache Spark 数据集
使用 Java 到 DynamoDB 表