所以首先我想將串列磁區到每個可能的磁區,而不改變串列的順序。像這樣:
[['a', 'b', 'a']]
[['a'], ['b', 'a']]
[['a', 'b'], ['a']]
[['a'], ['b'], ['a']]
執行此操作的方法數為 4。我想洗掉部件中具有相同字符的所有可能磁區。對于與上次相同的輸入:
[['a'], ['b', 'a']]
[['a', 'b'], ['a']]
[['a'], ['b'], ['a']]
洗掉了 [['a', 'b', 'a']] ,因為它在同一部分有 2 個 a。如何在python中做到這一點?
uj5u.com熱心網友回復:
一種方法是使用itertools.combinationsonrange創建對串列進行磁區的所有不同方式。一旦串列被磁區,過濾掉任何部分包含重復元素。
from itertools import combinations, chain
def partition(alist, indices):
# https://stackoverflow.com/a/1198876/4001592
pairs = zip(chain([0], indices), chain(indices, [None]))
return (alist[i:j] for i, j in pairs)
lst = ["a", "b", "a"]
result = []
split_count = len(lst)
for i in range(split_count):
for combination in combinations(range(1, split_count), i):
parts = [part for part in partition(lst, combination)]
if all(len(part) == len(set(part)) for part in parts):
result.append(parts)
for parts in result:
print(parts)
輸出
[['a'], ['b', 'a']]
[['a', 'b'], ['a']]
[['a'], ['b'], ['a']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322304.html
上一篇:我想要串列中每個名字的數量
