lambda、map、reduce、filter函数讲解
# coding:utf-8 """
几个特殊的函数:
lambda
lambda后面直接跟变量
变量后面是冒号
冒号后面是表达式,表达式计算结果就是本函数的返回值
作用:没有给程序带来性能上的提升,带来的是代码的简洁
map
格式:map(func, seq) func是一个函数,seq是一个序列对象
最终结果得到一个list
执行时,序列对象中的每个元素,从左到右的顺序,一次被取出来,并塞入到func那个函数中
map是上下运算
reduce
reduce是横向逐个元素进行运算
filter
过滤器
""" # lambda 功能的三种实现方式 # 最原始方式
def lambda_test():
def add(x):
x += 3
return x
numbers = range(10)
new_numbers = []
for i in numbers:
new_numbers.append(add(i))
return new_numbers # 列表解析的方式,推荐使用
def lambda_test2():
return [i+3 for i in range(10)] # lambda方式实现
def lambda_test3():
lam = lambda x:x+3 # 一行表示了add方法
numbers = range(10)
n2 = []
for i in numbers:
n2.append(lam(i))
return n2 # lambda 多参数
def lambda_test4(x,y):
g = lambda x,y:x+y #计算x+y
print g #返回的是方法名地址 <function <lambda> at 0x0000000002A2AB38>
return g(x,y) # lambda多参改进
def lambda_test5(x,y):
return (lambda x,y:x+y)(x,y) """
map
"""
# lambda_test的功能也能通过map实现
def map_test():
def add(x):
x += 3
return x
numbers = range(10)
return map(add, numbers) # map改进,lambda实现函数
def map_test2():
numbers = range(10)
return map(lambda x:x+3, numbers) # 列表解析实现map的功能
def map_test3():
return [i+3 for i in range(10)] # map的优雅(多参)
def map_test4():
list1 = range(1,6)
list2 = range(6,11)
return map(lambda x,y:x+y, list1, list2) # zip方式实现map_test4功能
def map_test5():
list1 = range(1,6)
list2 = range(6,11)
lst = zip(list1, list2)
return [x+y for x,y in lst] # reduce
def reduce_test():
return reduce(lambda x,y:x+y, range(10)) # for循环实现
def reduce_test2():
lam = lambda x,y:x+y
numbers = range(10)
sum_number = 0
for i in numbers:
sum_number += i
return sum_number # 列表解析器操作,不能复用,函数发生变化,列表解析器就失效了
def reduce_test3():
return sum([x for x in range(10)]) #练习
#两个list,a=[3,9,8,5,2],b=[1,4,9,2,6].计算a[0]b[0]+a[1]b[1]+...的结果
#方法1:
def test():
a,b = [3,9,8,5,2],[1,4,9,2,6]
lst = zip(a,b)
return sum(x*y for x,y in lst)
#方法2
def test2():
a,b = [3,9,8,5,2],[1,4,9,2,6]
lst = zip(a,b)
return reduce(lambda x,y:x+y, [m*n for m,n in lst])
# 方法3, lambda、map、reduce都使用上了
def test3():
a,b = [3,9,8,5,2],[1,4,9,2,6]
return reduce(lambda x,y:x+y,map(lambda x,y:x*y, a,b)) #filter
def filter_test():
numbers = range(-5,5)
print numbers
return filter(lambda x:x>0, numbers) # 列表解析器执行filter
def filter_test2():
numbers = range(-5,5)
return [x for x in numbers if x>0] if __name__ =="__main__":
print "----lambda-------"
print lambda_test()
print lambda_test2()
print lambda_test3()
print lambda_test4(3,4)
print lambda_test5(5,6)
print "-----map-----"
print map_test()
print map_test2()
print map_test3()
print map_test4()
print map_test5()
print "-------reduce-------"
print reduce_test()
print reduce_test2()
print reduce_test3()
print "----exercise--------"
print test()
print test2()
print test3()
print "-----filter----------"
print filter_test()
print filter_test2()
执行的结果是:
----lambda-------
[, , , , , , , , , ]
[, , , , , , , , , ]
[, , , , , , , , , ]
<function <lambda> at 0x0000000002A792E8> -----map-----
[, , , , , , , , , ]
[, , , , , , , , , ]
[, , , , , , , , , ]
[, , , , ]
[, , , , ]
-------reduce------- ----exercise-------- -----filter----------
[-, -, -, -, -, , , , , ]
[, , , ]
[, , , ]
lambda、map、reduce、filter函数讲解的更多相关文章
- python 函数式编程之lambda( ), map( ), reduce( ), filter( )
lambda( ), map( ), reduce( ), filter( ) 1. lambda( )主要用于“行内函数”: f = lambda x : x + 2 #定义函数f(x)=x+2 g ...
- Python学习:函数式编程(lambda, map() ,reduce() ,filter())
1. lambda: Python 支持用lambda对简单的功能定义“行内函数” 2.map() : 3.reduce() : 4.filter() : map() ,reduce() , filt ...
- python中lambda,map,reduce,filter,zip函数
函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...
- Python: lambda, map, reduce, filter
在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? 下面就上面的问题进行一下解答. 1.lambda是什么? ...
- map/reduce/filter/lambda
Python内建了map()/reduce()/filter()函数. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的It ...
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- Python map/reduce/filter/sorted函数以及匿名函数
1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...
- Python-函数式编程-map reduce filter lambda 三元表达式 闭包
lambda 匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中 三元运算符 其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值 ...
- [python基础知识]python内置函数map/reduce/filter
python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...
- Python高阶函数_map/reduce/filter函数
本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...
随机推荐
- openwrt 添加luci选项
刚刚下载的openwrt trunk版本,安装后没有luci选项,如下图 需要添加luci页面选项. 步骤如下: (1)修改配置文件 .config , 将 CONFIG_FEED_luci is n ...
- PL/SQL第四章 where子语句
-- 学习where语句 -- 1.学会where子句中使用常规比较符 -- 常规比较操作符:=,<>(不等于),!=,>=,<=,>,< -- 当区分大小写时,可 ...
- 服务器上安装FileZilla Server连接时报You appear to be behind a NAT router. Please configure the passive mode settings and forward a range of ports in your router.
官方资源下载链接:客户端,或者直接点击下载“FileZilla_3.24.0_win64-setup.exe”:服务端,或者直接点击下载“FileZilla_Server-0_9_60_2.exe”: ...
- ubuntu 语言设置
1.ubuntu ibus 输入法无法切换拼音 原因未安装中文输入法 sudo apt install ibus-pinyin //安装pinyinwin + space(空格) 切换中文输入法 再用 ...
- php数组去重(一维数组)
<?php $arr = ['1', '1', 'PHP', 'PHP', 2, 3]; print_r($arr); echo "<br>"; print_r( ...
- hdu1754splaytree区间查询
以前用线段树做的题..发现splay好神奇 splay的区间查询就是把那个区间移到两个节点之间进行操作即可,同时每次rotate不要忘记pushup #include<iostream> ...
- noip 2017 时间复杂度
自认为是少有的复杂的代码 这题思想很简单,就是大模拟 对于for循环,一行读入4个字符串,然后分类讨论: ①:如果是一个正常的O(n),那么累计n的指数加1 ②:如果是一个常数级别的,那么继续循环,但 ...
- 数据库中的null用法
- javafx基于使用fxml布局的tableview数据绑定用法
来个简单明了的 fxml的tableview数据绑定和java代码方式的数据绑定很像,不同的在于要有一到映射 首先看个目录 1.界面文件Sample.fxml <?xml version=&qu ...
- android-getTextSize返回值是以像素(px)为单位的,setTextSize()以sp为单位
使用如下代码时,发现字号不会变大,反而会变小:size = (int) mText.getTextSize() + 1;mText.setTextSize(size);后来发现getTextSize返 ...