打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
抛弃冗长的循环,是时候使用Python单行代码替代循环啦
userphoto

2023.04.25 浙江

关注

发挥Python的全部威力:告别乏味的循环

在今天快节奏的世界中,程序员们总是在寻求用更少的代码实现更多的功能。在某些编程语言中,比如Java,这几乎是不可能的,但在Python中,使用一行代码实现这个目标更容易——这就是Python一行代码的魅力所在。

使用Python一行代码编程最令人愉悦的方面之一就是有机会阅读和编写仅需几行代码就能完成大量工作的代码。实际上,有一个完整的子文化围绕着编写最简洁的代码来解决给定问题的挑战。

在本文中,我们将探讨用一行代码函数替换多行Python循环的不同方法。让我们在接下来的3分钟里保持高度集中!

我们需要知道以下5个概念,才能将大多数多行循环转换为一行代码:

  • 列表推导式
  • Lambda函数
  • Map函数
  • Filter函数
  • Reduce函数

即使您之前听过这些函数,刷新这些概念也无妨。让我们来看看这些函数的实际应用:

1、列表推导式

列表推导式是从现有列表中创建新列表的简洁方法。它们可以用来替代用于迭代列表并执行某些操作的“for”循环。列表推导式的基本语法是:

[expression for item in iterable if condition]

其中,“item”代表可迭代对象中的一个元素,“condition”是一个可选的过滤器,用于确定是否应该将该元素包含在结果列表中,“expression”是一个应用于每个元素的函数或操作,用于生成相应输出元素的列表。

以下是一些使用列表推导式替换Python循环的示例:

示例1:生成数字的平方

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]## 找到数字的平方## 传统循环方式squares = []for num in nums:    squares.append(num ** 2)## 一行代码 - 列表推导式squares = [num ** 2 for num in nums]### 在第一个方括号 '[' 后面写任何内容### 都将写入输出列表 - 在上面的例子中是 'num ** 2'

示例2:假设我们有一个列表的列表,每个内部列表包含不同学科的学生成绩。我们想要计算每个学生在所有学科中的平均成绩,然后计算所有学生的总平均成绩。

grades = [[90, 85, 95], [80, 90, 85], [95, 85, 90], [75, 80, 70]]### 传统循环方式student_avgs = []for student in grades: avg = sum(student) / len(student) student_avgs.append(avg)overall_avg = sum(student_avgs) / len(student_avgs)## 一行代码 - 列表推导式student_avgs = [sum(student) / len(student) for student in grades]overall_avg = sum(student_avgs) / len(student_avgs)print('每个学生的平均成绩:', student_avgs)print('所有学生的平均成绩:', overall_avg)

2、Lambda函数

Lambda函数是常规函数的一行代码替代方案。它可以在单行代码中定义,因此在我们的代码中占用的时间和空间更少。例如,在下面的代码中,我们可以看到多个使用lambda函数替换常规函数的示例。

一个参数的函数

## 常规函数def multiply_by_2(x):    return x * 2## Lambda函数lambda x: x * 2

带有2个或更多参数的函数

## 常规函数def multiple_three_numbers(x, y, z): return x * y * z## Lambda函数lambda x, y, z: x * y * z

注意:Lambda函数不能替换Python中的循环,但可以帮助我们将多行功能转换为一行代码。

3、Map函数

Map是一个内置函数,它接受一个函数和一个可迭代对象作为参数,并将该函数应用于可迭代对象中的每个元素。

map(function, iterable)

可迭代对象可以是可以迭代的对象,例如 - 列表、元组等。Map函数可用于替换用于对列表中的每个元素执行某些操作的循环。以下是一个示例:

示例1:生成数字的平方

## 传统循环方式nums = (1, 3, 4, 5, 6, 7)def square_numbers(nums): squares = [] for num in nums: squares.append(num ** 2)## 一行代码squares = list(map(lambda x: x ** 2, nums))

示例2:考虑以下情况,我们有一个句子列表,并希望计算每个句子中单词的数量。我们可以使用多行循环来实现如下所示:

## 传统循环方式sentences = ['This is the first sentence.', 'And this is the second sentence.', 'Finally, the third sentence.']word_counts = []for sentence in sentences:    words = sentence.split()    word_count = len(words)    word_counts.append(word_count)### 一行代码word_counts = list(map(lambda sentence: len(sentence.split()), sentences))

4、Filter Filter

Filter Filter是一个内置函数,它接受一个函数和一个可迭代对象作为参数,并返回一个新的可迭代对象,该对象仅包含函数返回True的元素。

filter(function, iterable)

它可用于替换用于从可迭代对象中过滤元素的“for”循环。以下是一个示例:

示例1:找到偶数。

## 传统循环方式nums = [1, 4, 5, 6, 7, 8, 9]even_nums = []for num in nums:    if num % 2 == 0:        even_nums.append(num)## 一行代码even_nums = list(filter(lambda x: x % 2 == 0, nums))

示例2:过滤出所有同时可被3和5整除的数字。

numbers = [10, 15, 20, 30, 45, 50, 60]## 传统函数def div_by_3_5(nums): result = [] for num in nums: if num % 3 == 0 and num % 5 == 0: result.append(num)## 一行代码result = list(filter(lambda num: num % 3 == 0 and num % 5 == 0, numbers))print(result)

5、Reduce

Python中的reduce()函数是functools模块中的内置函数。它将滚动计算应用于列表中连续的元素对(每次取2个元素),并返回单个输出。

reduce(func, iterable)
nums = [1, 2, 3, 4, 5]## 传统函数def sum_nums(nums): result = 0 for num in nums: result += num return resultprint(sum_nums(nums)) # Output: 15from functools import reduce## 一行代码 - 使用 reducesum_nums = reduce(lambda x, y: x + y, nums)print(sum_nums) # Output: 15

示例2:找到列表中所有偶数的乘积。

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]def product_of_even(my_list):  product = 1  for num in my_list:    if num % 2 == 0:        product *= num## 一行代码 - 使用 reduce  filterproduct = reduce(lambda x, y: x * y, filter(lambda x: x % 2 == 0, my_list))

总结

总之,用一行代码函数代替循环可以使代码更简洁、易读和易于维护。我们可以使用内置函数如列表推导、map 和 filter 在一行代码中执行复杂操作。然而,需要谨慎使用这些函数,不要为简洁而牺牲清晰度。记住,可读性是编写良好代码的关键。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何用Map、Filter和Reduce替换Python For循环?
[python] Python map函数总结
如何用十分钟学会函数式 Python?
金三银四,50道必备的Python面试题(建议收藏)
Python的高级特征你知多少?来对比看看
超详细的 Python 基础语句总结(多实例、视频讲解持续更新)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服