高级函数 mpa()filter() reduce()

'''
map()

map(fn,1sd)
参数1是函数
参数是序列



功能:将传入的函数依次作用在序列的每一个元素上,并把结果作为一个新的Iterator返回。


'''

def char2int(chr):
    return {"0":0, "1":1, "2":2, "3":3, "4":4, "5":5}


# 一点一点看:
#
# 1、对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。
#
# 来个例子:
#map(function, iterable, ...)
def add100(x):
    return x+100

hh = [11,22,33]
res = map(add100, hh)
print(list(res))


#2、如果给出了额外的可迭代参数,则对每个可迭代参数中的元素并行的应用‘function’def abc(a, b, c):
     return a*10000 + b*100 + c

list1 = [11, 22, 33]
list2 = [44, 55, 66]
list3 = [77, 88, 99]
res1 = map(abc, list1, list2, list3)
print(list(res1))


def abc1(a, b):
    return a ** b

list2 = [11, 22, 33]
list3 = [44, 55, 66]

print(map(None, list2, list3))

#3、使用map()函数可以实现将其他类型的数转换成list,但是这种转换也是有类型限制的,
# 具体什么类型限制,在以后的学习中慢慢摸索吧。这里给出几个能转换的例子:

#***将元组转换成list***
map(int, (1, 2, 3))
[1, 2, 3]
#***将字符串转换成list***
map(int, '1234')
[1, 2, 3, 4]
#***提取字典的key,并将结果存放在一个list***
map(int, {1: 2, 2: 3, 3: 4})
[1, 2, 3]
#***字符串转换成元组,并将结果以列表的形式返回***
map(tuple, 'agdf')
[('a',), ('g',), ('d',), ('f',)]
#将小写转成大写
def u_to_l (s):
  return s.upper()
print (map(u_to_l,'asdfd'))
'
2.filter函数
filter函数会对指定序列执行过滤操作。
filter函数的定义:
filter(function or None, sequence) -> list, tuple, or string
function是一个谓词函数,接受一个参数,返回布尔值TrueFalse
filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包含调用结果为True的元素。
返回值的类型和参数sequence的类型相同
比如返回序列中的所有偶数:
'''
def is_even(x):
  return x & 1 != 0

print(list(filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))
#返回结果为:
[1, 3, 5, 7, 9]
#如果function参数为None,返回结果和sequence参数相同。
'''

# 3.reduce函数
# reduce函数,reduce函数会对参数序列中元素进行累积。
# reduce函数的定义:
# reduce(function, sequence[, initial]) -> value


function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,
和上一次调用function的结果做参数再次调用function第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function否则会以序列sequence中的前两个元素做参数调用function
'''
from functools import reduce
def func(x, y):
    return x + y

print(reduce(func, [2, 3, 4, 5, 6]))
print(reduce(func, [2, 3, 4, 5, 6], 100))

# 注意function函数不能为None

猜你喜欢

转载自blog.csdn.net/ku20aijiu/article/details/80271886