先说下这个例子,是雪峰老师的例子,筛选出素数,首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取新序列的第一个数5,然后用5把序列的5的倍数筛掉: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 不断筛下去,就可以得到所有的素数。这是原理,很简单,然后我是这样实现的: def born(): n=2 while True: yield n n=n+1 #这个是产生序列 def fx(n): return lambda x:x%n>0 #筛选没有n公约数的数
>>> def prime(): it=born() while True: m=next(it) yield m it=filter(fx(m),it) #执行
>>> for n in prime(): if n<99: print(n) else: break 我的问题是这样的,在prime函数中,从列表中取出来第一个数,又放回去(因为第一个数肯定是素数),那么放回去这个数是放在哪里的,是列表最后?还是第一个。还有在filter()中,it列表的数据为什么不是传给m而是传给了fx中的x啊,咋就这么神奇.....
|