python基础之map/reduce/filter/sorted

Posted MnCu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础之map/reduce/filter/sorted相关的知识,希望对你有一定的参考价值。

---map(fun,iterable)

  首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象。即map(fun,iterable)

  map函数就是将具体数值根据算法进行计算,并将结果保存为一个迭代器。我们知道,迭代器很\'懒\',通过调用next函数一次只输出一个值。

  来看一个最简单的map()例子。

#给定一组数1,2,3要求求出每个数加一后的值
>>> def add(x):
...     x+=1
...     return x
...     
>>> l=[1,2,3]
>>> r=map(add,l)
>>> print(r)
<map object at 0x03E4F510>
>>> for i in r:
...     print(i)
...     
2
3
4

使用map对一行进行多个赋值

x,y,z=map(int,input(\'please input your number:\').split())
print(x,y,z)

如何利用map()将名字首字母大写?

def daxie(name):
    return name[0].upper+name[1:]

def daxie2(name):
    return \'%s%s\'%(name[0].upper(),name[1:])

a=[\'linghuchong\',\'dongfangbubai\']
r=map(daxie2,a)
for i in r:
    print(i)

 

--reduce

  reduce同map函数一样,也是接受两个参数,但不同的是,reduce函数将当前数值的计算结果与下一个数值的计算结果进行累积计算。

    reduce()函数第一次运行时会将可迭代对象的第一项作为第一个参数,第二项作为第二个参数传入函数。

    第二次运行则会将函数第一次运行所返回的结果作为第一个参数,可迭代对象的第三项作为第二个参数传入函数……

  即:reduce(f,[1,2,3,4])=f(f(f(1,2),3),4)

  来看一个简单的reduce函数的例子

#
from functools import reduce
def leijia(x,y):    #注意,我们所定义的函数必须要接受两个参数,否则会报错
    return x+y
print(reduce(leijia,[1,2,3,4,5]))

#结果
15

#当然也可多加默认参数
from functools import reduce
def leijia(x,y,z=2):
    return x+y+z
print(reduce(leijia,[1,2,3,4,5]))

#结果:
23

 --filter

  同上两个函数一样,接受两个参数,第一个参数为函数名,第二个参数为序列。但filter根据序列中各个元素作用与函数时,函数返回结果(True/False)来决定该元素是否保留。

  来看一个筛选偶数的简单例子:

def select(num):
    if num%2==0:
        return True
    else:
        return False

r=filter(select,[1,2,3,4,5,6])
for i in r:
    print(i)

 --sorted(list,key=None,reverse=False)

  sorted顾名思义,就是排序的意思。

>>> sorted([22,33,55,11,44])
[11, 22, 33, 44, 55]

  sorted还可以接受一个key函数,实现自定义排序。

    1  key指定的函数将作用于list的 每一个元素 上。也就是list的 每个元素 作为参数传入key函数

    2  sorted()函数按照keys函数返回的结果进行排序,并 按照对应关系 返回list相应的元素

>>> sorted([22,33,-11,44,-55],key=abs)
[-11, 22, 33, 44, -55]

 来一个复杂一点的实例:

  

#  根据名称排序
>>> d=[(\'linghuchong\',\'xixingdafa\'),(\'dongfangbubai\',\'kuihuabaodian\'),(\'zhangwuji\',\'qiankundanuoyi\')]
>>> def by_name(a):
...     return a[0]
...     
>>> r=sorted(d,key=by_name)
>>> print(r)
[(\'dongfangbubai\', \'kuihuabaodian\'), (\'linghuchong\', \'xixingdafa\'), (\'zhangwuji\', \'qiankundanuoyi\')]

#  根据功法排序
>>> def by_gongfa(a):
...     return a[1]
...     
>>> r2=sorted(d,key=by_gongfa)
>>> print(r2)
[(\'dongfangbubai\', \'kuihuabaodian\'), (\'zhangwuji\', \'qiankundanuoyi\'), (\'linghuchong\', \'xixingdafa\')]

 

以上是关于python基础之map/reduce/filter/sorted的主要内容,如果未能解决你的问题,请参考以下文章

Python基础之函数

人生苦短,我用Python(目录)

Python 基础

博客目录

python基础

python基础之模块之os模块