在写程序中,我们要注意总结一些常用技巧,比如说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生成器代码应用举例