filter小结
filter,顾名思义,可以将列表中的固定内容过滤。输入两个参数,一个函数参数,一个列表序列,通过判定列表中每个元素经过此函数的结果,true留,false走的顺序完成筛选。
例如,下面是最简单的利用filter删除偶数
# 删除列表中的偶数
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
再例如,采用埃氏筛法辨别质数
原理就是从2开始所有的自然数,从2开始筛选是否可以整除,能整除就删除
def oddIter():
n = 1
while True:
n = n + 2
yield n
def notDivisible(n):
return lambda x: x % n > 0
#判断是否整除:借用lambda创建一个简单函数
def primes():
yield 2
it = oddIter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(notDivisible(n), it) # 构造新序列
# 打印1000以内的素数:
for n in primes():
if n < 1000:
print(n)
else:
break
联系:寻找回文数(例:12321,909)
#方案1:反向求整数方法
def is_palindrome(n):
x = n
y = 0
while x != 0 : # 反向求整数
y *= 10
y += (x%10)
x //= 10
return y == n
#方案2:切片——比较翻转后的数是否回文
def is_palindrome(n):
return str(n)[::1]==str(n)[::-1]
知识点:python中切片技巧:
例:n = [1,2,3,4,5]
n[::1] 代表正序 ,即变为 [1,2,3,4,5]
n[::-1]代表倒序,即变为[5,4,3,2,1]
对于列表,数字等,都可适用此方法