Python生成器代码应用举例

Python fireling 852℃ 0评论

在写程序中,我们要注意总结一些常用技巧,比如说List Comprehensions,Dict Comprehensions,Generator以前其他的一些提高效率的写法。

在Generator中,一种很常见的用法就是yield的使用,每次在调用Generator的next()函数时,都会从上次执行到的yield语句处开始执行。

有的时候,我们要在一组“给定的数”中寻找满足“某种条件”的数字”组合“,怎么办?

具体一点,比如说我们要在1~100这些数中寻找和为50的两两数字组合,如何求解?下面给出我的代码:

# coding:utf-8
a = [i for i in xrange(100)]
b = {i+1:True for i in a}
print b
def fun(integer):
    for i in xrange(100):
        for j in xrange(i+1, 100):
            if b.get(i) and b.get(j) and i+j==integer:
                yield i, j
integer = 50
obj = fun(integer) # generator
while 1: # while 1 is faster than while True
    try:
        print obj.next()
    except Exception as e:
        print e
        break

同理,当我们要在1~100这些数中寻找和为50的三三数字组合,可以采用如下代码实现:

# coding:utf-8
a = [i for i in xrange(100)]
b = {i+1:True for i in a}
print b
def fun(integer):
    for i in xrange(100):
        for j in xrange(i+1, 100):
            for k in xrange(j+1, 100):
                if b.get(i) and b.get(j) and b.get(k) and i+j+k==integer:
                    yield i, j, k
integer = 50
obj = fun(integer) # generator
while 1: # while 1 is faster than while True
    try:
        print obj.next()
    except Exception as e:
        print e
        break

转载请注明:宁哥的小站 » Python生成器代码应用举例

喜欢 (1)

您必须 登录 才能发表评论!