-- 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]