社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

效率翻倍!99%都会用到的Python高阶函数

学姐带你玩AI • 10 月前 • 452 次点击  

来源:投稿  作者:sunny
编辑:学姐

当我们写Python程序时,为了让代码既简洁易懂又能运行得更快,我们通常会使用一些高级的内置函数。这些函数包括lambdamap()enumerate()zip()filter(),它们可以帮助我们更方便地处理数据,提高代码效率。

graph LR;
A[Python高阶函数] --> C[lambda];
A[Python高阶函数] --> D[map];
A[Python高阶函数] --> E[enumerate];
A[Python高阶函数] --> F[zip];
A[Python高阶函数] --> G[filter];

lambda函数

虽然它的名字听起来有点高大上,但其实它就是一种简单、方便的函数,可以让你在不定义函数名的情况下快速地编写小型的功能代码。

想象一下你在写程序的时候,需要一个小小的函数来完成某个任务,但这个函数用一次就没用了,定义个名字又觉得麻烦。这时候,lambda函数就派上用场了!

lambda函数的格式很简单,就是这样的:lambda 参数: 表达式。它可以接受任意数量的参数,但只能有一个表达式。下面让我用一个案例来给你们演示一下。

假设我们有一个列表,里面装着一些数字,我们想把这些数字都平方一下。我们可以用lambda函数来实现这个功能,而不需要写一个完整的函数。

numbers = [12345]
squared_numbers = map(lambda x: x**2, numbers)
print(list(squared_numbers))

# 结果如下:
[1491625]

在这个例子中,lambda x: x**2 就是一个lambda函数,它接受一个参数 x,然后返回 x 的平方。我们将这个lambda函数传给了map()函数,然后把它应用到了列表 numbers 中的每个元素上。最后,我们通过list()将结果打印出来,就得到了原始列表中每个数字的平方。

所以,lambda函数就像是一个临时的、即用即抛的小工具,能够帮助我们快速地完成一些简单的任务,而不用费心去定义一个完整的函数。希望通过这个例子,大家能够更好地理解lambda函数的用途和工作原理!

map函数

这个函数听起来有点抽象,但实际上它非常实用,可以帮助我们对列表中的每个元素都做同样的操作。

想象一下,你有一个列表,里面装着一些数字,然后你想对每个数字都做一样的操作,比如求平方、取对数、加倍等等。如果你用循环一个个处理,会很麻烦吧?这时候, map() 函数就可以派上用场了。

map() 函数的作用就是将一个函数应用到列表中的每个元素,然后返回包含了所有结果的新列表。让我用一个例子来给大家演示一下。

假设我们有一个列表,叫做 numbers,里面装着一些数字,我们想对每个数字都求平方。我们可以使用 map() 函数来快速实现这个功能。

numbers = [12345]
squared_numbers = map(lambda x: x**2, numbers)
print(list(squared_numbers))

# 结果如下:
[1491625]

在这个例子中,map() 函数将 lambda 函数 lambda x: x**2 应用到了列表 numbers 的每个元素上,得到了每个数字的平方,并将这些结果组成一个新的列表返回。最后,我们通过 list() 将结果打印出来,就得到了原始列表中每个数字的平方。

所以, map() 函数就是一个很方便的工具,能够帮助我们对列表中的每个元素都做相同的操作,而不用费心去写循环来一个个处理。希望通过这个例子,大家能够更好地理解 map() 函数的用途和工作原理!

enumerate函数

这个函数听起来可能有点复杂,但其实它很有用,而且用起来也不难。

首先,让我们来解释一下 enumerate() 的作用。假设你有一个列表,里面装着一些东西,比如水果的名字。现在,你想知道每个水果在列表中的位置,同时也想知道它们的名字。这时候,enumerate() 就派上用场了!

enumerate() 函数可以帮你把列表中的每个元素都和它们的索引(位置)对应起来。这样一来,你就可以知道每个元素在列表中的位置,还能同时访问到元素的值。

让我们来看一个例子吧!假设我们有一个水果列表,里面装着苹果、香蕉和橙子。现在,我们想知道每个水果在列表中的位置,并打印出来。

Codefruits = ['apple''banana''orange']

for index, fruit in enumerate(fruits):
    print(f"The fruit at index {index} is {fruit}")
    
# 结果如下:
The fruit at index 0 is apple
The fruit at index 1 is banana
The fruit at index 2 is orange

在这个例子中,我们使用了 enumerate() 函数来遍历 fruits 列表中的每个元素。在 for 循环中, enumerate() 函数会同时返回元素的索引(位置)和值,我们分别用 indexfruit 来接收它们。然后,我们打印出每个水果在列表中的位置和它们的名字。

所以,enumerate() 函数就是这样一个简单而强大的工具,它让你在遍历列表的同时,还能轻松地获取每个元素的索引和值。这样一来,你就可以更方便地处理列表中的元素了!

zip函数

zip() 函数可以让我们把多个列表(或其他可迭代对象)“拉链”起来,就像拉链一样,一一对应地组合起来。这样,我们就可以同时处理多个列表,而不需要使用复杂的循环或者索引操作。

想象一下,你有两个列表,一个列表里是学生的名字,另一个列表里是他们的成绩。现在,你想把学生的名字和他们的成绩对应起来,以便更方便地管理。

这时候,zip() 函数就能帮上忙了!它会把两个列表中的元素一一对应起来,然后组成一个新的可迭代对象。每次迭代,它都会返回一个包含对应元素的元组。

让我们来看一个例子吧!假设我们有两个列表,分别是学生的名字和他们的成绩,我们想把它们对应起来。

students = ['Alice''Bob''Charlie']
grades = [859088]

for student, grade in zip(students, grades):
    print(f"{student} got a grade of {grade}")

# 结果如下:
Alice got a grade of 85
Bob got a grade of 90
Charlie got a grade of 88

在这个例子中,我们使用了 zip() 函数来同时遍历 studentsgrades 两个列表。在每次迭代中,zip() 函数会返回一个包含学生名字和对应成绩的元组,我们分别用 studentgrade 来接收它们。然后,我们打印出每个学生的名字和他们的成绩。

所以,zip() 函数就像一把神奇的拉链,能够把多个列表“拉”在一起,让它们一一对应地组合起来。这样一来,我们就可以更方便地处理多个列表了!

filter函数

filter() 函数像是一个过滤器,它能够帮助我们从一个序列中筛选出满足指定条件的元素,把不符合条件的元素过滤掉,只留下符合条件的元素。

想象一下,你有一个数字列表,你只想保留其中的偶数。这时候,filter() 函数就能派上用场了!它可以根据你设定的条件,把列表中符合条件的元素保留下来,而将不符合条件的元素去掉。

让我们看一个例子吧!假设我们有一个数字列表,我们只想保留其中的偶数。

numbers = [12345678910]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))

# 结果如下:
[246810]

在这个例子中,我们使用了 filter() 函数来过滤 numbers 列表中的元素。filter() 函数接受两个参数,第一个参数是一个函数(或者是能够接受一个参数并返回布尔值的可调用对象),用来指定过滤的条件;第二个参数是需要过滤的序列。

在这里,我们使用了 lambda x: x % 2 == 0 这个匿名函数作为条件,它的作用是判断一个数字是否为偶数。然后,我们把 numbers 序列传递给 filter() 函数进行过滤。

最后,我们将过滤后的结果转换为列表并打印出来。这样,我们就只剩下了列表中的偶数了!

所以,filter() 函数就像是一个智能的过滤器,能够根据我们设定的条件,帮我们筛选出想要的元素,让我们的程序更加灵活和高效!

总结

在学习了 map()filter()reduce()zip()enumerate() 这五个函数后,我们可以说我们已经掌握了 Python 中一些非常强大和灵活的工具。

  • map() 函数让我们能够对序列中的每个元素应用同一个函数,从而快速地生成一个新的序列。
  • filter() 函数允许我们根据指定的条件筛选出序列中的元素,只保留满足条件的部分。
  • reduce() 函数则可以帮助我们对一个序列中的元素进行累积操作,得到一个最终的结果。
  • zip() 函数能够将多个序列中的元素一一对应地组合起来,形成一个新的可迭代对象。
  • enumerate() 函数则是用来同时遍历序列中的元素和它们的索引,让我们在循环中更方便地获取索引值和元素值。

这些函数在处理列表、元组、集合等序列类型数据时非常有用,能够提高我们的编码效率和代码的可读性。掌握了它们,我们可以更轻松地完成各种任务,写出更加简洁、高效的 Python 代码。

推荐课程

《Python ·  AI&数据科学入门》

点这里👇关注我, 回复“python”了解课程

往期精彩阅读

👉kaggle比赛baseline合集

👉经典论文推荐合集

👉人工智能必读书籍

👉本专科硕博学习经验

10个赞学姐的午饭就可以有个鸡腿🍗

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/171223
 
452 次点击