Python排列组合问题

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 copy

def 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 answers

if __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))

 

  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。