python四个数字两两组合_生成四位不重复数字(0-9)的所有组合,四位0-9,[Python]代码Py...

生成四位不重复数字(0-9)的所有组合,四位0-9,[Python]代码Py

[Python]代码Python语言: 生成四位不重复数字(0-9)的所有组合#coding=cp936#关于这个问题的精彩讨论参见这里# http://groups.google.com/group/python-cn/browse_thread/thread/4d9eda8e422a6cf8#在我的电脑上#init_set 1000 times 5.529#init_set2 1000 times 4.674#init_set3 1000 times 3.287#init_set4 1000 times 18.271#init_set5 1000 times 2.069def init_set8(r10=range(10)): """ 把循环内的range函数提到外面 times5.486 ==> 4.427 """ ret = [] for i in r10: for j in r10: for k in r10: for l in r10: if i != j and i != k and i != l and j != k and j != l and k != l: ret.append((i, j, k, l)) return rettiming(init_set8, 1000)def init_set9(r10=range(10)): """ for 循环改成列表推导 times5.486 ==>3.773 """ return [(i, j, k, l) for i in r10 for j in r10 for k in r10 for l in r10 if ( i != j and i != k and i != l and j != k and j != l and k != l) ]timing(init_set9, 1000)def init_set10(r10=range(10)): """ return 一个 generator init_set10 1000 times 0.004 这个无疑是最快的 :P 我最喜欢这个解决方案,空间换时间的算法 对这个问题属于 过度优化 """ return ((i, j, k, l) for i in r10 for j in r10 for k in r10 for l in r10 if( i != j and i != k and i != l and j != k and j != l and k != l) )timing(init_set10, 1000)def init_set11(): """ 用代码的空间代价换取计算P4_4的时间 init_set11 1000 times 7.268 OMG reduce(lambda x,y:x+y,l)太慢了 """ c10_4=[( i, j, k, l ) for i in xrange(0, 10) for j in xrange(i+1, 10) for k in xrange(j+1, 10) for l in xrange(k+1, 10) ] ret=reduce(lambda x,y:x+y, [ [ (i, j, k, l), (i, j, l, k), (i, k, j, l), (i, k, l, j), (i, l, j, k), (i, l, k, j), (j, i, k, l), (j, i, l, k), (j, k, i, l), (j, k, l, i), (j, l, i, k), (j, l, k, i), (k, i, j, l), (k, i, l, j), (k, j, i, l), (k, j, l, i), (k, l, i, j), (k, l, j, i), (l, i, j, k), (l, i, k, j), (l, j, i, k), (l, j, k, i), (l, k, i, j), (l, k, j, i),] for i, j, k, l in c10_4 ], ) return retdef init_set12(): """ generator是伟大的发明,数据流编程万岁 init_set12 1000 times 1.758 """ c10_4=(( i, j, k, l ) for i in xrange(0, 10) for j in xrange(i+1, 10) for k in xrange(j+1, 10) for l in xrange(k+1, 10) ) from itertools import chain ret=chain( *( ( (i, j, k, l), (i, j, l, k), (i, k, j, l), (i, k, l, j), (i, l, j, k), (i, l, k, j), (j, i, k, l), (j, i, l, k), (j, k, i, l), (j, k, l, i), (j, l, i, k), (j, l, k, i), (k, i, j, l), (k, i, l, j), (k, j, i, l), (k, j, l, i), (k, l, i, j), (k, l, j, i), (l, i, j, k), (l, i, k, j), (l, j, i, k), (l, j, k, i), (l, k, i, j), (l, k, j, i),) for i, j, k, l in c10_4 ) ) return list(ret)timing(init_set12, 1000)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值