Python笔记- 匿名函数lambda(),过滤函数filter(),求素数,排序sorted
2017-04-03 11:45
916 查看
把函数作为参数传入,这样的函数称为高阶函数。
• words——单词列表
• func——遍历列表中单词的函数
2、enliven() 函数可以简洁地用下面的一个 lambda 代替:
lambda 函数接收一个参数 word。在冒号和末尾圆括号之间的部分为函数的定义。
例如,在一个list中,删掉偶数,只保留奇数:
经典题:用filter求素数
1、列出从2开始的所有自然数,构造一个序列:2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
2、取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉3, 5, 7,9, 11, 13, 15, 17, 19 …
3、取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:5, 7, 8,10, 11,13, 14,16, 17,19, 20, ..
4、取新序列的第一个数5,然后用5把序列的5的倍数筛掉:7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, …
5、不断选取序列的第一个数,就可以得到所有的素数,第一个数就是素数。
用Python来实现:
1、先构造一个从3开始的奇数序列:这是一个生成器,并且是一个无限序列。
2、定义一个筛选函数:
3、定义一个生成器,不断返回下一个素数,将2初始确定为素数,所有数字从3的奇数序列开始:
4、是一个无限序列,所以调用时需要设置一个退出循环的条件:
2、sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。用sorted()排序的关键在于实现一个映射函数。
按绝对值大小排序:
字符串忽略大小写排序:
要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
匿名函数: lambda()
1、首先,举一个使用普通函数的例子。定义函数 edit_story(),参数列表如下所示:• words——单词列表
• func——遍历列表中单词的函数
def edit_story(words, func): for word in words: print(func(word)) def enliven(word): return word.capitalize() + '!' stairs = ['thud', 'meow', 'thud', 'hiss'] edit_story(stairs, enliven) >>>Thud >>>Meow >>>Thud >>>Hiss
2、enliven() 函数可以简洁地用下面的一个 lambda 代替:
edit_story(stairs, lambda word: word.capitalize() + '!')
lambda 函数接收一个参数 word。在冒号和末尾圆括号之间的部分为函数的定义。
过滤函数filter():
1、Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素,默认保留。例如,在一个list中,删掉偶数,只保留奇数:
def is_odd(n): return n%2==1 list(filter(is_odd,range(1,100)))
经典题:用filter求素数
1、列出从2开始的所有自然数,构造一个序列:2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
2、取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉3, 5, 7,9, 11, 13, 15, 17, 19 …
3、取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:5, 7, 8,10, 11,13, 14,16, 17,19, 20, ..
4、取新序列的第一个数5,然后用5把序列的5的倍数筛掉:7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, …
5、不断选取序列的第一个数,就可以得到所有的素数,第一个数就是素数。
用Python来实现:
1、先构造一个从3开始的奇数序列:这是一个生成器,并且是一个无限序列。
def _odd_iter(): n = 1 while True: n = n + 2 yield n
2、定义一个筛选函数:
def _not_divisible(n): return lambda x: x % n > 0
3、定义一个生成器,不断返回下一个素数,将2初始确定为素数,所有数字从3的奇数序列开始:
def primes(): yield 2 it = _odd_iter() # 初始序列 while True: n = next(it) # 返回序列的第一个数 yield n it = filter(_not_divisible(n), it) # 构造新序列
4、是一个无限序列,所以调用时需要设置一个退出循环的条件:
# 打印1000以内的素数: for n in primes(): if n < 1000: print(n) else: break
排序:
1、sorted()函数就可以对list进行排序>>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36]
2、sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。用sorted()排序的关键在于实现一个映射函数。
按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36]
字符串忽略大小写排序:
#str.lower()将字符串中所有的大写字符转为小写 #str.upper()将字符串中所有的小写字符转为大写 >>>sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) >>>['about', 'bob', 'Credit', 'Zoo']
要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']
相关文章推荐
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- python几个重要的函数(lambda,filter,reduce,map,zip) 一、匿名函数lambda lambda argument1,argument2,...argumentN :e
- 【python】详解lambda匿名函数以及结合map、reduce、filter、sorted等使用
- python中的lambda匿名函数以及针对序列的内建函数map、filter和reduce
- python常用函数之lambda、reduce、map、sorted、filter
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
- python入门笔记(Day5)--filter,sorted,lambda,装饰,偏,模块
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- python 高阶函数 filter/sorted(过滤/排序)
- python笔记(2)排序函数sorted的用法
- 鱼c笔记——Python的匿名函数(lambda表达式)以及filter()和map()函数
- python2,3中内建函数map,reduce,filter,sorted配合lambda
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
- python3 常见函数 map、reduce、filter、lambda、sorted
- 【转】python的内建函数:filter,map,reduce,lambda,sorted等
- python3学习笔记:函数作为返回值&匿名函数lambda
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
- Python过滤函数filter()使用自定义函数过滤序列实例
- 【Python基础】Python的lambda函数与排序
- Python过滤函数filter()使用自定义函数过滤序列实例