Python

Python的高阶函数

苦丁树 苦丁树 2023年3月18日 23:26
0 555

map函数

把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过函数func处理后的结果,map()函数不对原序列或迭代器对象做任何修改

#将一个整数序列转为字符串序列
list(map(str, range(5)))

['0', '1', '2', '3', '4']

# 对序列的每个数字加5
def add5(v):
   return v+5

list(map(add5, range(10)))

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

def add(x,y):
   return x + y
list(map(add, range(5), range(5,10)))

[5, 7, 9, 11, 13]

# 也可以 匿名表达式
list(map(lambda x,y: x+y, range(5), range(5,10)))

[5, 7, 9, 11, 13]

reduce

标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值

求和1,2,3,4...10

# 求和1,2,3,4...10
from functools import  reduce
from operator import add
seq = list(range(1,11))
seq      

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

reduce(lambda x,y: x+y, seq)

55

reduce(add, seq)

55

# 求5的阶乘 1*2*3*4*5
import operator
reduce(operator.mul, range(1,6))

120

#将1,2,3,4,5,6,7,8,9拼成字符串
''.join(map(str, list(range(1,10)) ))

'123456789'

filter()

内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素

# 找出序列中的阿拉伯字母的项
seq = ['foo', 'x41','?!', '***', '!@#$']
def fun(x):
   return str(x).isalnum()

list(filter(fun, seq))

['foo', 'x41']

# 利用列表推倒式
[ i for i in seq if str(i).isalnum() ]

['foo', 'x41']

#匿名函数
list(filter(lambda x: str(x).isalnum(), seq))

['foo', 'x41']

zip()

zip函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。可以这样理解这个函数,把多个序列或可迭代对象中的所有元素左对齐,然后像拉拉链一样往右拉,把所经过的每个序列中相同位置上的元素都放到一个元组中,只要有一个序列中的所有元素都处理完了就不再拉拉链了,返回包含若干元组的zip对象。

list(zip('abcd', [1,2,3,4]))

[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

list(zip('123'))

[('1',), ('2',), ('3',)]

list(zip(range(1,5), ['piner','bity','eygle','laoxiong','kamus'] ))

[(1, 'piner'), (2, 'bity'), (3, 'eygle'), (4, 'laoxiong')]

标签: python
上一篇

没有了

Weather
广州 天气
26 °C