python从零开始--17 函数之map reduce filter sorted

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







 
 

 
 

猜你喜欢

转载自blog.csdn.net/pansc2004/article/details/80332627