Py学习  »  Python

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

学姐带你玩AI • 1 年前 • 499 次点击  

来源:投稿  作者: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
 
499 次点击