1 Star 0 Fork 0

LiXuan/PythonStudy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
filter.py 1.38 KB
一键复制 编辑 原始数据 按行查看 历史
lx610 提交于 2021-04-20 21:36 . 学习filter
# filter()也接收一个函数和一个序列。
# 和map()不同的是,filter()把传入的函数依次作用于每个元素,
# 然后根据返回值是True还是False决定保留还是丢弃该元素。
# 例如,在一个list中,删掉偶数,只保留奇数,可以这么写:
def is_odd(n):
return n%2 == 1
l = list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
print(l)
def not_empty(s):
return s and s.strip()
n = list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))
print(n)
# 可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。
# 注意到filter()函数返回的是一个Iterator,
# 也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
# 用filter求素数
def _odd_iter():# “全体素数”序列
n=1
while True:
n = n +2
yield n
def _not_divisible(n):
return lambda x:x%n >0
def primes():
yield 2
it = _odd_iter()# 初始序列
while True:
n = next(it)# 返回序列的第一个数
yield n
it = filter(_not_divisible(n),it)
# 打印20以内的素数:
for n in primes():
if n < 20:
print(n)
else:
break
# 注意到Iterator是惰性计算的序列,所以我们可以用Python表示“全体自然数”,
# “全体素数”这样的序列,而代码非常简洁。
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/lixuanSz/python-study.git
git@gitee.com:lixuanSz/python-study.git
lixuanSz
python-study
PythonStudy
master

搜索帮助