python内置函数-6 filter, map, reduce

filter(参数1, 参数2) 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

                                   参数1 : 函数名(lambda匿名函数也行)

                                   参数2 : 可迭代对象

import math

# 过滤1到 10的偶数
def is_even(n):
    return n % 2 == 0
ret_1 = filter(is_even, range(1, 11))
print(type(ret_1), ret_1 ,list(ret_1))    
# <class 'filter'> <filter object at 0x0000026C660E95F8> [2, 4, 6, 8, 10]


# 过滤出1-100种平方根是整数的数
def is_sqr(x):
    return math.sqrt(x) % 1 == 0
ret_2 = filter(is_sqr, range(1, 101))
print(type(ret_2), ret_2, list(ret_2))
# <class 'filter'> <filter object at 0x000001E5E717E128> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 匿名函数写法
# ret_3 = filter(lambda x : math.sqrt(x) % 1 == 0, range(1, 101))

②map(参数1, 参数2-1, 参数2-2.....)  # 参数1中的方法需要几个参数, 参数2就需要几个

# 1
def add(x):
    return x*x

ret1 = map(add, range(1, 10))
print(ret1)         # <map object at 0x000002266AD98780>
print(list(ret1))   # [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 2
def add(x, y):
    return x+y
ret1 = map(add, range(1, 101), range(1, 2))
print(ret1)         # <map object at 0x000002266AD98780>
print(list(ret1))   # [2]  第三个参数短,最后结果以他的长度为主

# 3
listx = [1, 2, 3, 4, 5, 6, 7]       # 7个元素
listy = [2, 3, 4, 5, 6, 7]          # 6个元素
listz = [100, 100, 100, 100]        # 4个元素

list_result = map(lambda x, y, z: x**2 + y + z, listx, listy, listz)
print(list_result)          # <map object at 0x000001D070197828>
print(list(list_result))    # [103, 107, 113, 121]

# 4 用于对名字书写的修改
name_list={'toM', 'jEEry', 'loore'}

def format_name(s):
    ss = s[0:1].upper()+s[1:].lower()
    return ss

print(list(map(format_name, name_list)))


两者不同:

# map返回的是False和True
ret_map = map(lambda x: x > 5, range(10))
print(list(ret_map))      # [False, False, False, False, False, False, True, True, True, True]


# filter后汉书是将不符合元素的条件过滤掉
ret_filter = filter(lambda x: x > 5, range(10))
print(list(ret_filter)) # [6, 7, 8, 9]

其它: reduce函数之前也在内置函数中, Python3放在functools里了

from functools import reduce


def add_(x, y):
    ret = x + y
    return ret


ret = reduce(add_, [1, 2, 3, 4, 5, 6])    # 21

三者区别:

         filter 过滤   map 检查    reduce  加工

猜你喜欢

转载自blog.csdn.net/qq_42327755/article/details/86612750