Python高阶函数(zip,map,reduce,filter,sorted)

1、 zip函数
作用:可以接收不限数量的可迭代对象,可以将这些可迭代对象中的元素打包成一个个的元组,然后返回一个迭代器。如果各个可迭代对象的元素个数不一致,则以元素个数最短的那个为准。(接收任意数量的可迭代对象,依次将这些可迭代对象中的元素取出来去组装成元组,最后返回一个迭代器。)

函数原型:zip(*iterables)

实例:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(zipped)  # zipped为一个迭代器对象
打印zipped中的元素
zip_lst = [item for item in zipped]
print(zip_lst)  # [(1, 'a'), (2, 'b'), (3, 'c')]

在自动化中的运用
使用openpyxl库从Excel表格中读取数据,将每一行数据分别与表头组装成key:value的形式,并组装成列表包字典的形式[{},{}]并返回
使用场景:需要做数据驱动,从Excel表格中读取数据的时候可以使用此方式

def datas_from_excel(filename, ws_name):
    """
    获取excel表格中的数据,将每一行数据和表头组装起来,形成要使用的数据[{},{}]
    :param filename: 文件路径
    :param ws_name: sheet名
    :return: 组装好的数据
    """
    wb = load_workbook(filename)  # 加载文件
    login_datas_sheet = wb[ws_name]  # 打开指定的sheet页
    keys = login_datas_sheet[1]  # 获取表头
    datas_rows = login_datas_sheet.iter_rows(2)  # 获取所有数据
    datas_lst = []
    # 将每一行数据都与表头以key:value的形式组装起来
    for row in datas_rows:
        dct = dict(zip([key.value for key in keys],
                       [cell.value for cell in row]))
        datas_lst.append(dct)  # 将每一组数据添加到列表中
    return datas_lst

2、map函数
作用:map() 是 Python 中的一个内置函数,用于将一个函数应用到一个或多个可迭代对象的每个元素上,并返回一个迭代器,其中包含函数处理后的结果。它支持惰性求值,适合处理大量数据或需要函数式编程的场景。例如,map(lambda x: x * 2, [1, 2, 3]) 会将列表中的每个元素乘以 2,返回 [2, 4, 6]。
惰性求值:一种编程策略,指的是只在需要的时候才计算表达式的值,而不是立即计算。这种方式可以节约内存,并提高性能,特别是对于大数据量的时候。
函数原型:map(function, iterable, …)
使用场景:当需要对一个可迭代对象中的每一个元素执行操作的时候可以使用map函数

实例:
v_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(map(lambda num: num * num, v_list)))  # 输出[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

3、reduce函数
作用:需要通过 functools 模块导入,用于对一个序列中的元素做累积的操作,比如累加、累乘等,返回一个最终的结果。
函数原型:reduce(function, iterable[, initializer])
使用场景:用于对一个序列中的元素做累积的操作,比如累加、累乘等,返回一个最终的结果

实例:
from functools import reduce
v_list = range(1, 101)
summation = reduce(lambda total, num: total + num, v_list)#注意:这里的计算结果
#是赋值给total的,也就是Lambda里面的第一个参数,第二个参数接收的是每次从列表中得到的元素。
print(summation)  # 输出5050
实例:这里将map和reduce结合起来使用,map作为reduce的第二个参数,将字典digits的每一个值获取出来,reduce将这些值组装成一个整数返回
from functools import reduce
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
result = reduce(lambda x, y: x * 10 + y, map(lambda c: digits[c], digits))
print(result)  # 输出123456789

4、filter函数
作用:filter() 函数用于过滤一个可迭代对象,过滤掉不符合条件的元素,返回由符合条件元素组成的新的可迭代对象。

filter 接收两个参数,第一个为函数,第二个为可迭代对象,可迭代对象中的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新可迭代对象中。
函数原型:filter(function, iterable)

实例:
list1 = [1, 2, 3]
new_list = filter(lambda num: num % 2 == 0, list1)
for i in new_list: #new_list为一个可迭代对象
    print(i) # 输出2

实例:
number_list = range(-5, 5)
less_than_zero = list(filter(lambda x: x < 0, number_list))
print(less_than_zero)  # 输出[-5, -4, -3, -2, -1]

5、sorted函数
作用:sorted() 是 Python 中的一个内置函数,它能够对任何可迭代对象(如列表、元组、字符串等)进行排序,并返回一个新的已排序列表。此函数非常灵活,允许通过 key 参数指定排序依据的函数,以及通过 reverse 参数控制排序顺序(升序或降序)。例如,可以轻松地根据字符串长度、数值大小或其他自定义标准来排序项目。这使得 sorted() 成为处理和组织数据时极为有用的工具。
函数原型:sorted(iterable, *, key=None, reverse=False)
这里的*表示后面的参数必须以key=value的形式传递

实例:
v_list = [5, 2, 3, 4, 1]
print(sorted(v_list))  # 输出[1, 2, 3, 4, 5]
自己指定排序函数:
student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sort_student = sorted(student_tuples, key=lambda student: student[2])
print(sort_student)  # 输出[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
解释:
lambda 是一个匿名函数,冒号前面是函数的参数,后面是返回值。
student 是 student_tuples 中的每个元组。
student[2] 表示取元组中的第三个元素,即使用每个元组中的第三个元素来排序。
posted @ 2025-03-15 16:00  南峤  阅读(40)  评论(0)    收藏  举报