我碰到過這個帖子:How to generate all permutations of a list in PythonPython的排列,包括子
但我需要更多的東西,即所有字符串的排列以及所有的子串的所有排列。我知道這是一個很大的數字,但有可能嗎?
我碰到過這個帖子:How to generate all permutations of a list in PythonPython的排列,包括子
但我需要更多的東西,即所有字符串的排列以及所有的子串的所有排列。我知道這是一個很大的數字,但有可能嗎?
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))
當你鏈接狀態的問題,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)]))
可能重複:http://stackoverflow.com/questions/12273688/algorithm-to-generate-permutations-of-a-list字符串和他們的子字符串 – bdean20