用python实现全排列

#coding:utf-8
def permutation(inStr, pos,  parentData):
        if len(inStr) == 0:
            return
        if len(inStr) == 1:
            print "{" + inStr + "}"
            return
        # here we need a new buffer to avoid to pollute the other nodes.
        buffer = []
        buffer.extend(parentData)
        # choose the element
        buffer.append(inStr[pos])

        # get the remnant elements.
        subStr = kickChar(inStr, pos)

        # got one of the result
        if len(subStr) == 1:
            buffer.extend(subStr)
            print buffer
            return

        # here we use loop to choose other children.
        for i in range(len(subStr)):
            permutation(subStr, i, buffer)

    # a simple method to delete the element we choose
def kickChar(src,  pos):
        srcBuf = []
        srcBuf.extend(src)
        srcBuf.pop(pos)
        return srcBuf
def main():
    input = [‘A‘,‘B‘,‘C‘,‘D‘]
    for i in range(len(input)):
        permutation(input, i, [])
main()

输出:

C:\Python27\python.exe D:/work/search/3.py
[‘A‘, ‘B‘, ‘C‘, ‘D‘]
[‘A‘, ‘B‘, ‘D‘, ‘C‘]
[‘A‘, ‘C‘, ‘B‘, ‘D‘]
[‘A‘, ‘C‘, ‘D‘, ‘B‘]
[‘A‘, ‘D‘, ‘B‘, ‘C‘]
[‘A‘, ‘D‘, ‘C‘, ‘B‘]
[‘B‘, ‘A‘, ‘C‘, ‘D‘]
[‘B‘, ‘A‘, ‘D‘, ‘C‘]
[‘B‘, ‘C‘, ‘A‘, ‘D‘]
[‘B‘, ‘C‘, ‘D‘, ‘A‘]
[‘B‘, ‘D‘, ‘A‘, ‘C‘]
[‘B‘, ‘D‘, ‘C‘, ‘A‘]
[‘C‘, ‘A‘, ‘B‘, ‘D‘]
[‘C‘, ‘A‘, ‘D‘, ‘B‘]
[‘C‘, ‘B‘, ‘A‘, ‘D‘]
[‘C‘, ‘B‘, ‘D‘, ‘A‘]
[‘C‘, ‘D‘, ‘A‘, ‘B‘]
[‘C‘, ‘D‘, ‘B‘, ‘A‘]
[‘D‘, ‘A‘, ‘B‘, ‘C‘]
[‘D‘, ‘A‘, ‘C‘, ‘B‘]
[‘D‘, ‘B‘, ‘A‘, ‘C‘]
[‘D‘, ‘B‘, ‘C‘, ‘A‘]
[‘D‘, ‘C‘, ‘A‘, ‘B‘]
[‘D‘, ‘C‘, ‘B‘, ‘A‘]

Process finished with exit code 0

代码借鉴于http://airu.iteye.com/blog/1930391的java代码

时间: 2024-10-05 07:21:22

用python实现全排列的相关文章

Python代码优化及技巧笔记(一)

前言 这里是记录一些本人在开发过程中遇到的一些细节问题,与君共勉. 版权说明 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Coding-Naga链接:http://blog.csdn.net/lemon_tree12138/article/details/50736887 来源:CSDN 1.Python实现全排列 方案一: a = [1, 2, 3, 4, 5, 6, 7, 8, 9] result = list(itertools.permutations(a,

全排列问题(JAVA和Python实现)

问题:给定指定字符串(ABCCEF)输出其全排列.   运用分治的思想 JAVA:用TreeSet去重(且保持有序) import java.util.Set; import java.util.TreeSet; public class Main { static Set<String> result=new TreeSet<String>();//用来去掉重复的元素 public static void fullPermutation(char[] data, int flag

python非递归全排列

刚刚开始学习python,按照廖雪峰的网站看的,当前看到了函数这一节.结合数组操作,写了个非递归的全排列生成.原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列.因为Python切割数组或者字符串,以及合并比较方便,所以,程序会节省很多代码. 1 def getArrayInsertCharToStr(STR,CHAR): 2 arr =[] 3 s_len = len(STR) 4 index =0 5 while inde

递归实现全排列python

python递归实现"abcd"字符串全排列 1.保持a不动,动bcd 2.保持b不动,动cd 3.保持c不动,动d def pailie(head="",string=""): if len(string)>1: for father_string in string: pailie(head+father_string,string.replace(father_string,"")) #关键一点:将头和尾全部传下去

python实现基础的深度优先搜索(DFS, depth first search)解决数的全排列问题

数的全排列,是一个很简单的问题,平时我们用笔用纸就能列出答案,但是数列位多的时候,排列的结果就有非常多了,例如有1,2,3,4,5,6,7,8,9这一个数列,有9个数字,则有9!(9的阶乘)这么多种结果.那是非常大的.今天我就来介绍用深度优先搜索来解决这个数的全排列的问题. 深度优先搜索 首先简单介绍一下深度优先搜索,深度优先搜索的关键在于当下该如何做,至于下一步如何做,就与当下做的一样.深度优先搜索的基本模型为: dfs(step): 判断边界:执行相关操作,返回 尝试每一种可能 for( i

python 全排列

itertools模块现成的全排列: for i in itertools.permutations('abcd',4): print ''.join(i) 相关全排列算法: def perm(l): if(len(l)<=1): return [l] r=[] for i in range(len(l)): s=l[:i]+l[i+1:] p=perm(s) for x in p: r.append(l[i:i+1]+x) return r 版权声明:本文为博主原创文章,未经博主允许不得转载.

python 全排列combinations和permutations函数

结果为: 显然,combinations方法重点在组合,permutations方法重在排列. 还有就是,combinations和permutations返回的是对象地址,原因是在python3里面,返回值已经不再是list,而是iterators(迭代器), 所以想要使用,只用将iterator 转换成list 即可, 还有其他一些函数返回的也是一个对象,需要list转换,比如 list(map())等 . ---------------------  作者:mishi_zcf  来源:CS

Python入门

Python入门教程(个人日常学习记录,有不妥之处欢迎指正!后续更新,敬请期待...) 学习地址:http://www.imooc.com/learn/177 Python中数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括

Python高级特性:迭代器和生成器 -转

在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了. 迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身:next()方法返回容器的下一个元素,在结尾时引发StopIteration异常. __iter__()和next()