当前位置: 首页 > article >正文

Python高级函数1:使用 map()、reduce()、filter()、zip() 和 enumerate() 简化代码

Python高级函数1:使用 map、reduce、filter、zip和 enumerate 简化代码

  • 1. 原理
    • 1.1 map() 函数
    • 1.2 reduce() 函数
    • 1.3 filter() 函数
    • 1.4 zip() 函数
    • 1.5 enumerate() 函数
  • 2. 源码
    • 参考

Python 是一种通用且广泛使用的编程语言,提供一系列内置函数和库来帮助完成各种任务。
这篇博客将介绍一些Python中可以简化代码并提高效率的高级函数。包括map()、reduce()、filter()、zip()和 enumerate()函数,这些函数可以帮助编写更高效、更简洁的代码。

1. 原理

1.1 map() 函数

将指定的函数应用于可迭代对象(例如列表、元组或字符串)的每个元素,并返回具有修改后元素的新可迭代对象。也可应用于多个可迭代对象,将每一个迭代对象对应的元素进行相应的操作;

1.2 reduce() 函数

Python中 functools 模块的一部分,允许将函数应用于一系列元素,以便将它们减少到单个值。 例如可以使用 reduce() 将列表的所有元素相乘;
reduce()函数 还可以指定一个初始值作为其第三个参数。在这种情况下,初始值将用作函数的第一个参数,迭代对象的第一个元素将用作第二个参数。 例如,您可以使用 reduce()来计算数字列表的总和

1.3 filter() 函数

通过删除不满足指定条件的元素来过滤可迭代对象。它返回一个新的可迭代对象,其中仅包含满足条件的元素。 例如使用 filter()从列表中删除所有偶数;
filter() 也可以传递lambda 函数作为第一个参数

1.4 zip() 函数

将多个可迭代对象组合成一个元组的可迭代对象。zip()函数在最短的可迭代对象用尽时停止。 例如使用 zip() 将两个列表合并为元组列表;
也可以使用zip() 连接多个可迭代对象;
可以通过在函数调用或列表推导中使用 * 运算符来解压缩 zip()对象中的元组,如在函数调用中解包tuple/list表达式中解包tuple

1.5 enumerate() 函数

它向可迭代对象添加一个计数器并返回一个可迭代的元组,这些函数可以编写更干净、更简洁的代码;
也可以传递第2个参数指定计数器的起始值

2. 源码

# python高级函数1:map()、reduce()、filter()、zip()和 enumerate()
# python python_high1.py

# map() 函数,将指定的函数应用于可迭代对象(例如列表、元组或字符串)的每个元素,并返回具有修改后元素的新可迭代对象。
def get_lengths(words):
    return map(len, words)


words = ['cat', 'window', 'defenestrate']
lengths = get_lengths(words)
print(list(lengths))  # [3, 6, 12]

from functools import reduce


def multiply(x, y):
    return x * y


a = [1, 2, 3]
b = [10, 20, 30]
# map()函数也可应用于多个可迭代对象,将每一个迭代对象对应的元素进行相应的操作
result = map(multiply, a, b)
print(list(result))  # [10, 40, 90]


def multiply(x, y):
    return x * y


a = [1, 2, 3, 4]
# reduce()函数是 Python中functools模块的一部分,允许将函数应用于一系列元素,以便将它们减少到单个值。例如可以使用reduce()将列表的所有元素相乘
result = reduce(multiply, a)
print(result)  # 24

from functools import reduce


def add(x, y):
    return x + y


a = [1, 2, 3, 4]
# reduce()函数 还可以指定一个初始值作为其第三个参数。在这种情况下,初始值将用作函数的第一个参数,迭代对象的第一个元素将用作第二个参数。 例如,您可以使用 reduce()来计算数字列表的总和
result = reduce(add, a, 0)
print(result)  # 10


def is_odd(x):
    return x % 2 == 1


a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#  filter()函数通过删除不满足指定条件的元素来过滤可迭代对象。它返回一个新的可迭代对象,其中仅包含满足条件的元素。 例如使用 filter()从列表中删除所有偶数
odd_numbers = filter(is_odd, a)
print(list(odd_numbers))  # [1, 3, 5, 7, 9]

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# filter()以 lambda 函数作为第一个参数
odd_numbers = filter(lambda x: x % 2 == 1, a)
print(list(odd_numbers))  # [1, 3, 5, 7, 9]

#  zip()函数将多个可迭代对象组合成一个元组的可迭代对象。zip()函数在最短的可迭代对象用尽时停止。 例如可以使用 zip()将两个列表合并为元组列表:
a = [1, 2, 3]
b = ['a', 'b', 'c']
zipped = zip(a, b)
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'c')]

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [True, False, True]
# 使用zip()连接多个可迭代对象
zipped = zip(a, b, c)
print(list(zipped))  # [(1, 'a', True), (2, 'b', False), (3, 'c', True)]


# 可以通过在函数调用或列表推导中使用 * 运算符来解压缩 zip()对象中的元组
def print_tuples(a, b, c):
    print(f'a: {a}, b: {b}, c: {c}')


a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [True, False, True]
zipped = zip(a, b, c)

# 在函数调用中解包tuple
for t in zipped:
    print_tuples(*t)

print('------------------------------------------')
zipped = zip(a, b, c)
# list表达式中解包tuple
unzipped = [print_tuples(*t) for t in zipped]
print(unzipped)

# enumerate()函数向可迭代对象添加一个计数器,并返回一个元组的可迭代对象,其中每个元组由计数器和原始元素组成。 例如可以使用 enumerate()循环访问列表并打印每个元素的索引和值
a = ['a', 'b', 'c']
for i, element in enumerate(a):
    print(f'{i}: {element}')

a = ['a', 'b', 'c']
# 也可以传递第2个参数指定计数器的起始值
for i, element in enumerate(a, 1):
    print(f'{i}: {element}')

参考

  • https://medium.com/@etirismagazine/advanced-python-functions-841d4ce0a91a

http://www.kler.cn/a/15720.html

相关文章:

  • Notepad++的完美替代
  • uniapp vue3的下拉刷新和上拉加载
  • 联通大数据面试题及参考答案
  • 《应用数学学报》
  • cmake生成器表达式
  • IQ Offset之工厂实例分析
  • 【云台】开源版本SimpleBGC的电机驱动与控制方式
  • iVX开发中整理的常见问题与回答(三)
  • 虹科案例 | 如何通过智能、非接触式测量解决方案,提高起重机的安全和效率?
  • ESET NOD32 互联网安全软件和防毒软件 -简单,可靠的防护。
  • 优思学院|做质量管理有七大工具,都是什么?
  • 训练数据集处理
  • SpringMVC实现文件上传和下载和Json的简单实用
  • Promises对象
  • 西瓜书读书笔记整理(三)—— 第二章 模型评估与选择
  • 让你的ChatGPT更加强大——200+小白用来解锁ChatGPT高级功能的提示(Prompts)
  • C/C++的命名空间和调用函数的详细讲解
  • 【华为交换机配置命令大全】
  • 零售库存管理系统该如何选?这5款零售库存管理系统值得推荐!
  • 【C语言】#ifdef和#endif条件编译
  • pci总线协议学习笔记——PCI总线基本概念
  • 大数据好学么
  • Python学习10:计算三维空间某点距离原点的欧式距离(python123)
  • OSPF-MGRE综合实验
  • Microsoft Forms的應用(文行版)
  • 【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类