在写程序中,我们要注意总结一些常用技巧,比如说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