python中的map、reduce、filter、sorted函数

map、reduce、filter、sorted函数,这些函数都支持函数作为参数。

 

  • map函数

  • map() 函数语法:map(function, iterable, ...)
  • function -- 函数
  • iterable -- 一个或多个序列

map()接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每个元素都作平方,就可以用map()函数: 因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:

def f(x):
    return x*x
for i in map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]):
    print(i)

# 输出结果:1, 4, 9, 10, 25, 36, 49, 64, 81
注意:map()函数不改变原有的 list,而是返回一个新的 list。

利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。

由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。 假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list: 输入:['adam', 'LISA', 'barT'] 输出:['Adam', 'Lisa', 'Bart']

a = ['adam', 'LISA', 'barT']


def format_name(a):
    result = a[0:1].upper()+a[1:].lower()
    return result

for i in map(format_name,a):
    print(i)

# 输出结果:
Adam
Lisa
Bart

 

  • reduce函数

  • reduce() 函数语法:reduce(function, iterable[, initializer])
  • function -- 函数,有两个参数
  • iterable -- 可迭代对象
  • initializer -- 可选,初始参数

reduce接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

例如,编写一个f函数,接收x和y,返回x和y的和:

def add(x,y):
    return x+y

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

1
2
3
4
5
先计算头两个元素:f(1, 3),结果为4
再把结果和第3个元素计算:f(4, 5),结果为9
再把结果和第4个元素计算:f(9, 7),结果为16
再把结果和第5个元素计算:f(16, 9),结果为25
由于没有更多的元素了,计算结束,返回结果25

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

1
reduce(f, [1, 3, 5, 7, 9], 100)

结果将变为125。

示例:

from functools import reduce

a = [1,2,3,4,5]

def f(x,y):
    return x+y

print(reduce(f,a,100))

# 输出结果:115

 

更加高级的用法,根据字典的性别进行分类:

from functools import reduce

scientists =({'name':'Alan Turing', 'age':105, 'gender':'male'},
             {'name':'Dennis Ritchie', 'age':76, 'gender':'male'},
             {'name':'Ada Lovelace', 'age':202, 'gender':'female'},
             {'name':'Frances E. Allen', 'age':84, 'gender':'female'})


def group_by_gender(a,b):
    a[b['gender']].append(b['name'])
    return a


print(reduce(group_by_gender,scientists,{'male':[],'female':[]}))

 

 

  • filter函数

  • filter(function, iterable)
  •  function -- 判断函数。
  • iterable -- 可迭代对象。 

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

a = [1,2,3,4,5,6,7,8,9,10]


def is_odd(x):
    if x%2 == 0:
        return x


for i in filter(is_odd,a):
    print(i)

# 输出结果:2 4 6 8

 

  • sorted函数

  • sorted(iterable,key,reverse)
  • iterable表示可以迭代的对象
  • key表示选取参与比较的元素
  • reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序

示例:根据字典的值对字典进行排序:

dict = {"a":20,"b":60,"c":10,"d":50}

print(sorted(dict.items(), key=lambda x: x[1]))

 

posted @ 2018-12-14 16:34  苦瓜爆炒牛肉  阅读(445)  评论(0编辑  收藏  举报