python内置高阶函数 zip_python中常见的内置高阶函数

-- map(func, iterable)

map函数接收两个参数,第一个参数为一个函数,第二个参数为一个iterable对象,返回一个iterator对象

func只能有一个位置参数,它是作用在iterable对象的每一个元素上。In [43]: name = ['adam', 'LISA', 'barT']

In [44]: def normalize(name):

...: return name.capitalize()

...:

...:

In [45]: list(map(normalize, name))

Out[45]: ['Adam', 'Lisa', 'Bart']

-- reduce(func, sequence[, initial])

func函数似乎只能接收两个位置参数,超过两个似乎就不行了。reduce的作用就是,从左到右,使用func函数对sequence中的没两个参数进行计算,得到一个结果然后又和右边的值作为参数传入到func中进行计算,知道sequence全部计算完毕,最后返回一个总的结果。其效果相当于这样:reduce(func, [a,b,c,d])

<==>

func(func(func(a,b),c),d)

举个栗子,求累积:In [56]: def multi(x,y):

...: return x*y

...:

...:

In [57]: reduce(multi, range(1,11))

Out[57]: 3628800

求三个数的和,出bug啦:In [50]: def add(x,y,z):

...: return x+y+z

...:

...:

In [51]: reduce(add, range(1,10))

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

----> 1 reduce(add, range(1,10))

TypeError: add() missing 1 required positional argument: 'z'

再举个栗子://将数字字符串转换为整数In [54]: def str2int(s):

...: DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

...: return reduce(lambda x,y:x*10+y, map(lambda x:DIGITS[x], s))

...:

...:

In [55]: str2int("2321423432")

Out[55]: 2321423432

-- filter(func or None, iterable)

filter函数接收两个参数,返回一个迭代器。func作用于序列的每个元素,filter函数根据func作用在序列每个元素上返回的结果进行过滤操作,如果是True则保留,False则过滤。

这里举一个有意思的例子:In [58]: def _init_iter():#产生从3开始的无限序列

...: n = 1

...: while True:

...: n = n +2

...: yield n

...:

In [59]: def _not_divisable(n):#定义筛选函数,判断一个数是否可以被n整除,若可以整除,则返回True,否则返回False

...: return lambda x:x%n > 0

...:

...:

In [60]: def primes():

...: yield 2

...: it = __init_iter()#产生一个无限奇数序列

...: while True:

...: n = next(it) #获得第一个素数

...: yield n

...: it = filter(_not_divisable(n), it)#筛选掉n的倍数

In [66]: for n in primes():

...: if n<100:

...: print(n)

...: else:

...: break

...:

2

3

5

7

11

13

17

19

23

29

31

37

41

43

47

53

59

61

67

71

73

79

83

89

97

判断一个数是否是回文数(使用切片):In [82]: def is_palindorme(n):

...: n = str(n)

...: if n == n[::-1]:

...: return True

...: else:

...: return False

...:

In [85]: list(filter(is_palindorme, range(200)))

Out[85]:

[0,

1,

2,

3,

4,

5,

6,

7,

8,

9,

11,

22,

33,

44,

55,

66,

77,

88,

99,

101,

111,

121,

131,

141,

151,

161,

171,

181,

191]

-- sorted(iterable, key)

key指定的函数作用在iterable的每一个元素上,sorted按照key指定的函数进行排序。

该函数可以用于自定义的排序,默认的数字排序是从小到大,字母排序是按ASCII码排序。In [98]: sorted([1,23,34,2,34,65,2])

Out[98]: [1, 2, 2, 23, 34, 34, 65]

In [100]: sorted([1,-23,34,2,-34,65,-2],key = abs)

Out[100]: [1, 2, -2, -23, 34, -34, 65]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值