2013-08-25 108 views

回答

3
import itertools 

def all_permutations_substrings(a_str): 
    return (
     ''.join(item) 
     for length in xrange(1, len(a_str)+1) 
     for item in itertools.permutations(a_str, length)) 

但是請注意,這是真實的排列 - 如,hello將在它有兩個l小號兩次任意子排列,因爲l的將被視爲‘獨一無二的’。如果你想擺脫它,你可以通過它通過set()

all_permutations_no_dupes = set(all_permutations_substrings(a_str)) 
+0

我只會嘗試.. –

+0

你可以迭代它們(例如'爲了all_permutations_substrings(...)'的結果),或者你可以將它傳遞給'list()'if你只是想要一個列表。 – Amber

+0

@AnshumanDwibhashi,你可以這樣做:'result = [''.join(ele)for ele(set_all_permutations_substrings('hello'))]' – Akavall

1

當你鏈接狀態的問題,itertools.permutations是用於生成列表排列的解決方案。在python中,字符串可以被視爲列表,所以itertools.permutations("text")將工作得很好。對於子字符串,您可以將長度傳遞給itertools.permutations作爲可選的第二個參數。

def permutate_all_substrings(text): 
    permutations = [] 
    # All possible substring lengths 
    for length in range(1, len(text)+1): 
    # All permutations of a given length 
    for permutation in itertools.permutations(text, length): 
     # itertools.permutations returns a tuple, so join it back into a string 
     permutations.append("".join(permutation)) 
    return permutations 

或者如果你喜歡一個在線列表內涵

list(itertools.chain.from_iterable([["".join(p) for p in itertools.permutations(text, l)] for l in range(1, len(text)+1)]))