In writing the program, we should pay attention to summarizing some common techniques, such as List Comprehensions, Dict Comprehensions, and other previous ways to improve efficiency.
In
generator, a very common usage is the use of yield. Every time the next() function of the
generator is called, the execution will start from the last yield statement executed.
Sometimes, we have to find a "combination" of numbers that satisfy "a certain condition" in a set of "given numbers". What should we do?
To be more specific, for example, if we want to find a combination of two numbers with a sum of 50 from the numbers 1 to 100, how to solve it? My code is given below:
# 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
Similarly, when we want to find a combination of three and three numbers with a sum of 50 from 1 to 100, we can use the following code:
# 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