利用filter函数解决列出素数和回数问题
函数等说明:
filter(),作用为筛选,接受一个筛选函数和一个序列,筛选函数作用于序列的每一个元素,根据筛选函数的返回值(True或者False)决定该序列中的该元素是否保留,返回值是一个Iterator,该结果可以用list()函数返回一个列表。
lambda表达式:定义方法——以冒号为分隔前面为参数,后面为表达式,如lambda x,y,z:x+y+z def _not_divisible(n): return lambda x: x % n > 0
双冒号作用:【开始:结束:步数】,当开始结束都没有表示整个序列,返回一个序列
实现埃式筛法得到素数序列
埃式筛法:给定一个从2开始自然数范围,每次从序列中筛出第一个数,在删除序列中所有2的倍数,得到新序列,在重复筛选删除操作。
#在该代码中先写一个函数生成器用来生成从3开始的奇数序列,然后写一个筛选函数,在该筛选函数中参数为每次筛选的数,返回一个lambda表达式,该表达式用来删除筛选数的倍数
def f():
n = 1
while True:
n = n + 2
yeild n
def f1(n):
return lambda x:x % n > 0
def f2():
yield 2
l = f()
while True:
n = next(l)
yield n
l = filter(f1(n),l)
for m in f2():
if m < 1000:
print(m)
else:
break
列出回数
#写一个筛选函数,判断一个数是否是回数
def screen(n):
return str(n) == str(n)[::-1]
output = filter(screen,range(1,1000))
print(list(output))