Python基础篇【第2篇】: Python内置函数--map/reduce/filter/sorted

Python内置函数

lambda

  lambda表达式相当于函数体为单个return语句的普通函数的匿名函数。请注意,lambda语法并没有使用return关键字。开发者可以在任何可以使用函数引用的位置使用lambda表达式。在开发者想要使用一个简单函数作为参数或者返回值时,使用lambda表达式是很方便的。总结:处理简单逻辑,自动返回结果

语法格式:

lambda parameters: expression

就相当于

def fun(args)
    return expression

并且lambda支持多个参数操作

func = lambda a,b,**kwargs : a+b
result = func
print result

map/fileter/reduce

参考:map/reduce

1. map函数

map函数会根据提供的函数对指定序列做映射。

def map(function, sequence, *sequence_1): # real signature unknown; restored from __doc__
    """
    map(function, sequence[, sequence, ...]) -> list

    Return a list of the results of applying the function to the items of
    the argument sequence(s).  If more than one sequence is given, the
    function is called with an argument list consisting of the corresponding
    item of each sequence, substituting None for missing values when not all
    sequences have the same length.  If the function is None, return a list of
    the items of the sequence (or a list of tuples if more than one sequence).
    """
    return []

map函数的定义:

map(function, sequence[, sequence, ...]) -> list    第一个是函数名称,不用加括号,也可是lambda函数,后边是提供给函数操作的值,可以使多个

通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合。

function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的list。

例一

对一个序列中的每个元素进行平方运算:
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回结果为:
[1, 4, 9, 16, 25]
在参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用function函数。

例二

比如要对两个序列中的元素依次求和。
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
map返回的list中第一个元素为,参数序列1的第一个元素加参数序列2中的第一个元素(1 + 2),
list中的第二个元素为,参数序列1中的第二个元素加参数序列2中的第二个元素(3 + 4),
依次类推,最后的返回结果为:
[3, 7, 11, 15, 19]

例三

要注意function函数的参数数量,要和map中提供的集合数量相匹配。

如果集合长度不相等,会以最小长度对所有集合进行截取。[官方解释为用none替代,可是有关数字的操作none替代时会报错。]

当函数为None时,操作和zip相似:

map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

返回结果为:

[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

2. fileter函数

Python内建的filter()函数用于过滤序列。

map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
    return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 结果: [1, 5, 9, 15]

3. reduce

reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,

其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

举例:对一个序列求和,就可以用reduce实现

>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

4. sorted

我们需要对List进行排序,Python提供了两个方法
对给定的List L进行排序,
方法1.用List的成员函数sort进行排序
方法2.用built-in函数sorted进行排序(从2.4开始)

--------------------------------sorted---------------------------------------
>>> help(sorted)
Help on built-in function sorted in module __builtin__:

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
---------------------------------sort----------------------------------------
>>> help(list.sort)
Help on method_descriptor:

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1
-----------------------------------------------------------------------------

iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
 
注;一般来说,cmp和key可以使用lambda表达式。

sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

举例:

Sorting basic:
>>> print sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
>>> L = [5, 2, 3, 1, 4]
>>> L.sort()
>>> print L
[1, 2, 3, 4, 5]
Sorting  cmp:
>>>L = [(‘b‘,2),(‘a‘,1),(‘c‘,3),(‘d‘,4)]
>>>print sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3), (‘d‘, 4)]

Sorting  keys:
>>>L = [(‘b‘,2),(‘a‘,1),(‘c‘,3),(‘d‘,4)]
>>>print sorted(L, key=lambda x:x[1]))
[(‘a‘, 1), (‘b‘, 2), (‘c‘, 3), (‘d‘, 4)]
Sorting  reverse:
>>> print sorted([5, 2, 3, 1, 4], reverse=True)
[5, 4, 3, 2, 1]
>>> print sorted([5, 2, 3, 1, 4], reverse=False)
[1, 2, 3, 4, 5]
注:效率key>cmp(key比cmp快)

在Sorting Keys中:我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?>>> L = [(‘d‘,2),(‘a‘,4),(‘b‘,3),(‘c‘,2)]>>> print sorted(L, key=lambda x:(x[1],x[0]))>>>[(‘c‘, 2), (‘d‘, 2), (‘b‘, 3), (‘a‘, 4)]
时间: 2024-12-23 15:52:30

Python基础篇【第2篇】: Python内置函数--map/reduce/filter/sorted的相关文章

[python基础知识]python内置函数map/reduce/filter

python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法)来迭代遍历每个序列中的元素. 返回bool_func结果为true的元素的序列(注意弄清楚序列是什么意思)http://blog.csdn.net/bolike/article/details/19997465序列参考</a> 如果filter参数值为None,list参数中所有为假的元 素都将被

day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数

基础篇 本章大纲: 协程函数 递归函数 匿名函数lambda 内置函数map reduce filter  max min zip sorted 匿名函数lambda和内置函数结合使用 面向过程编程与函数编程 模块与包的使用 re模块内置函数 一,协程函数 注意:函数先定义,后使用.这是函数第一原则.函数主要分为定义,调用 1.1,什么是协程函数 协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种 1.2,协

python内置函数map/reduce/filter

python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架马车. filter() 函数:filter 函数的功能相当于过滤器.调用一个布尔函数bool_func来迭代遍历每个seq中的元素:返回一个使bool_seq返回值为true的元素的序列. >>>a=[1,2,3,4,5,6,7]>>>b=filter(lambda x:

python学习笔记-Day04-第三部分(内置函数,map,filter,reduce,yield)

map遍历序列,对其中的每个元素进行相应的操作,最终获得新的序列lst =[1,2,3,4]def fun(arg):    return arg+10new_lst = map(fun,lst) def fun2(a1,a2):    return a1+a2lst01 = [11,22,33]lst02 = [1,2,3]map(func2,lst01,lst02)  #序列的长度需要一致 或者 map(lambda a1,a2,a3:a1+a2,lst01,lst02) #########

内置函数--map,filter,reduce

一.map class map(object): """ map(func, *iterables) --> map object Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted. """ def __getattribut

内置函数-map、filter、zip

### zip ### --- 就是把 list ,合并到一起 a = ['a','b','c'] b = [1,2,3] 得到:a 1,b 2,c 3 # for a,b in zip(a,b):# print(a,b) print(list(zip(a,b))) ----- 将一维数组变成 二维:以长度小的数组为准 ### map ### ----- 循环调用函数 def my(num): return str(num) lis = [1,2,3,45,6,7,8] #new_list =

Python经常使用内置函数介绍【filter,map,reduce,apply,zip】

Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是将复杂的数据结构隐藏在内置函数中,用C语言来实现,所以仅仅要写出自己的业务逻辑Python会自己主动得出你想要的结果.这方面的内置函数主要有,filter,map,reduce,apply,结合匿名函数,列表解析一起使用,功能更加强大.使用内置函数最显而易见的优点是: 1. 速度快,使用内置函数,比

三元运算式、lambda表达式、内置函数map、reduce、filter以及yield生成器

一.三元运算(式) 对于一般简单的if else条件判断句可以用三元运算来表示 具体模式为: if condition:   expr1 else:   expr2 等价于: expr1 if condition else expr2 解释:如果if condition条件成立就执行expr1表达式,否则就执行else expr2表达式 示例① >>> if 2 == 2: ...    name = 'cool' ... else: ...    name ='hot' ...  &g

内置函数-map

1 In [15]: list(range(5)) 2 Out[15]: [0, 1, 2, 3, 4] 3 4 In [16]: list(map(str,range(5))) 5 Out[16]: ['0', '1', '2', '3', '4'] 6 7 In [17]: list(map(lambda x,y:x+y,range(5),range(5,10))) 8 Out[17]: [5, 7, 9, 11, 13] 内置函数map()把一个函数func依次映射到序列或迭代器对象的每一