標籤:
1.字串的全排列
問題描述:列印出原字串中所有字元的所有排列。——將輸入字串中的每個字元作為一個不同的字元看待,即使它們是重複的,如‘aaa‘應列印6次。
Python可以用產生器解決:
def permutation(elements): if len(elements) <=1: yield elements else: for perm in permutation(elements[1:]): for i in range(len(elements)): yield perm[:i] + elements[0:1] + perm[i:]if __name__ == "__main__": s=‘Diei‘ for item in list(permutation(list(s))): print ‘‘.join(item)
——產生器方法就是不停的插入前面一個元素的過程。
2.字串的全組合
問題描述:列印出原字串中所有字元的所有可能的組合。組合長度範圍在1到字串長度之間。
import copydef combine(l, n): if n==0: return answers = [] one = [0 for i in range(n)] def next_c(li = 0, ni = 0): if ni == n: answers.append(copy.copy(one)) return for lj in xrange(li, len(l)): one[ni] = l[lj] next_c(lj + 1, ni + 1) next_c() return answersif __name__ == "__main__": s=‘Dieicd‘ l=list(set(s)) answer=[] for i in range(len(l)): answer+=combine(l,i+1) print len(answer) for i in answer: print ‘‘.join(i)
——按包含的字元來檢測
3.使用Python的itertools庫
from itertools import product
#兩個序列對應的排列from itertools import permutations
#排列from itertools import combinations
#組合l = [1, 2, 3]print len(list(product(l,repeat=3)))#print list(product(l, repeat=4))print list(permutations(l)) print list(combinations([1,2,3,4,5], 3))
Python排列組合問題