[英]Finding all list and sublist combination from flat list
我試圖找到一種優雅的方式來從初始平面列表中生成所有可能的組合。
例如:
[在:]
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']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.