大家帮忙看看这段程序,关于python的生成器使用

Python/PHP/Perl 开发与设计
linz_p
帖子: 49
注册时间: 2006-12-23 10:51
送出感谢: 0
接收感谢: 0

Re: 大家帮忙看看这段程序,关于python的生成器使用

#16

帖子 linz_p » 2012-11-09 20:51

哥几个还真不客气!
问题解决。重新整理下,贴上!欢迎继续拍砖。
:em06

代码: 全选

# 从列表中移除一个元素,不影响原列表
def del_e(l, e):
    ll=l[:]
    try:
        ll.remove(e)
    except:
        pass
    return ll

# 简单循环实现
def cq0(ss=[1], all=[1,2,3,4]):
    i1 = ss[0]
    sslist=[]
    for i2 in del_e(all, i1):
        for i3 in del_e(all, i2):
            for i4 in del_e(all, i3):
                for i5 in del_e(all, i4):
                    for i6 in del_e(all, i5):
                        ss=[i1,i2,i3,i4,i5,i6]
                        sslist.append(ss)
    return sslist

# 递归实现
def cq1(ss=[1], all=[1,2,3,4], sslist=[], npass=6):
    nexts=del_e(all, ss[-1])
    for i in nexts:
        ss2=ss+[i]
        if len(ss2)==npass:
            sslist.append(ss2)
        else:
            cq1(ss2, all, sslist, npass)
    return sslist

# 递归+生成器
def cq2(ss=[1], all=[1,2,3,4], npass=6):
    nexts=del_e(all, ss[-1])
    for i in nexts:
        ss2=ss+[i]
        if len(ss2)==npass:
            yield ss2
        else:
            for e in cq2(ss2, all, npass):
                yield e

    
ll=[i for i in cq0() if i[0]==i[-1] and not 1 in i[1:-1]]
print len(ll)

ll=[i for i in cq1() if i[0]==i[-1] and not 1 in i[1:-1]]
print len(ll)

ll=[i for i in cq2() if i[0]==i[-1] and not 1 in i[1:-1]]
print len(ll)
头像
liu滔
帖子: 7211
注册时间: 2010-10-09 23:01
送出感谢: 5 次
接收感谢: 14 次

Re: 大家帮忙看看这段程序,关于python的生成器使用

#17

帖子 liu滔 » 2012-11-09 23:49

锤子出现了,我也来凑热闹,从微博跳过来的 :em01
头像
枫叶饭团
论坛版主
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
送出感谢: 1 次
接收感谢: 132 次
联系:

Re: 大家帮忙看看这段程序,关于python的生成器使用

#18

帖子 枫叶饭团 » 2012-11-11 22:33

哈哈,刚刚在给同学写最小二乘法计算器的时候发现这算法可以写成一行。。。虽然写得不怎么样,但是结果是正确的

代码: 全选

(lambda mv,g:'mv='+str((lambda mv,g:sum(mv)/len(mv)-((lambda mv,g:sum([(i-sum(mv)/len(mv))*(j-sum(g)/len(g)) for i,j in zip(mv,g)])/sum([(i-sum(g)/len(g))**2 for i in g]))(mv,g))*(sum(mv)/len(mv)))(mv,g))+'+'+str(sum([(i-sum(mv)/len(mv))*(j-sum(g)/len(g)) for i,j in zip(mv,g)])/sum([(i-sum(g)/len(g))**2 for i in g]))+'*g')(mv,g)
linz_p
帖子: 49
注册时间: 2006-12-23 10:51
送出感谢: 0
接收感谢: 0

Re: 大家帮忙看看这段程序,关于python的生成器使用

#19

帖子 linz_p » 2012-11-11 23:03

ee.zsy,
http://myzsyweb.blogspot.com竟然不能访问~~
头像
liu滔
帖子: 7211
注册时间: 2010-10-09 23:01
送出感谢: 5 次
接收感谢: 14 次

Re: 大家帮忙看看这段程序,关于python的生成器使用

#20

帖子 liu滔 » 2012-11-12 14:05

linz_p 写了:ee.zsy,
http://myzsyweb.blogspot.com竟然不能访问~~
因为那是GAE建出来的博客啊,GAE不能访问了 :em09
回复

回到 “Python/Php/Perl”