map : 提供了一种多次调用同一个函数的方式,将每次调用函数所需的参数组成一个列表,然后用map将函数和参数数组绑定起来。 但注意,
def f(x): return x * x +2 r = map(f , [3, 5, 6, 7]) # 绑定了函数和参数列表,但并不进行计算 l = list(r) # list(r)会进行实际的计算 print(l) [11, 27, 38, 51]
练习: 利用map()
函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。比如输入:['adam', 'LISA', 'barT']
,输出:['Adam', 'Lisa', 'Bart']
:
def capi_word(s): return s.capitalize() str_list = ["YYYjjjdfdflll", "yUMllkdK", "LISA", "zhangSan"] map1 = map(capi_word, str_list) list1 = list(map1) print(list1)
reduce 如果某个函数有两个入参,其中函数的返回值可以作为函数的第一个入参;reduce提供了一个途径,去循环调用该函数,每次将调用返回的值做为下次调用的第一个入参。reduce需要从functools中引入,具体的用法,用下面的实例体会一下。
from functools import reduce # reduce需要从functools中引入 def prod(numb_x, numb_y): # 定义用于迭代的方法 return numb_x * numb_y numb_list = [5, 34, 10, 20] redu1 = reduce(prod, numb_list) # 迭代使用prod, 第一次的参数是 5, 34; 第二次的参数是 prod(5,34),10......依此类推 print(redu1)
filter 用法类似map和reduce,它是python内建用于过滤序列的函数。filter调用的函数,其返回值是布尔值。
def is_circuit_numb(numb): # 判断一个数字是否是左右对称的,对称则返回True str_numb = str(numb) k = -1 is_circuit = True for i in range(0, len(str_numb)): if str_numb[i] != str_numb[k]: is_circuit = False return is_circuit #返回False else: k = k - 1 return is_circuit #返回True filter_func = filter(is_circuit_numb, range(1, 345)) # 用filter对给定范围1~344内的数字进行过滤,找出对称的数字 print(list(filter_func)) # filter本身不会运行判断,需要用list()方法运行
[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, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343]
sorted: python的内建函数,用来进行排序,最基础的用法如下
list1 = [34, 56, -23, 123, 5678, -34] sorted(list1) print(list1) print(sorted(list1)) #list1本身不会被排序,sorted返回一个排好序的copy
[34, 56, -23, 123, 5678, -34] [-34, -23, 34, 56, 123, 5678]
带keys参数的sorted, keys参数是一个函数,它对需要sorted的元素进行处理后,返回值,然后sorted用这些返回值来进行排序。
def fetch_tuple_item_first(a_tuple): return a_tuple[0] def fetch_tuple_item_last(a_tuple): return a_tuple[-1] L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] list1 = sorted(L, key=fetch_tuple_item_first) # 用每个元组的第一个元素进行排序 print(list1) list2 = sorted(L, key=fetch_tuple_item_last) # 用每个元组的最后一个元素进行排序 print(list2)
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)] [('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]