Python学习之-推导式

前言:

什么是推导式?
Python的推导式(comprehension)是一种简洁、灵活的构建序列(如列表、字典、集合)的方法。推导式常用于根据某个序列或可迭代对象来创建新的序列,遵循特定的规则或应用函数。Python支持的推导式主要有三种:列表推导式(list comprehension)、字典推导式(dictionary comprehension)、集合推导式(set comprehension)。

1.列表推导式 (List Comprehension)

[expression for item in iterable if condition]

这将为每个item创建一个列表,该item来自于iterable(一个可以迭代的对象,比如列表、元组、字符串等),并且满足condition条件的情况下,将expression的结果作为新列表的元素。

1.1 举例:

1.1.1 生成一个包含1到10各个整数平方的列表
squares = [x**2 for x in range(1, 11)]
print(squares)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

输出:
在这里插入图片描述

1.1.2 列表推导式中带if判断的例子
# 生成一个新列表,包含原列表中所有非负数
original_numbers = [1, -1, 2, -2, 3, -3]
non_negative_numbers = [x for x in original_numbers if x >= 0]
print(non_negative_numbers)  # 输出: [1, 2, 3]

输出:
在这里插入图片描述

2.字典推导式 (Dictionary Comprehension)

字典推导式用于创建字典,并且它的结构如下:

{key_expression: value_expression for item in iterable if condition}

这将为每个item创建一个字典项,其中key_expression用于生成键,value_expression用于生成值。

2.1 举例:

# 将一个字符串中字符及其对应的ASCII值作为键值对添加到字典中
chars = 'abc'
ascii_values = {char: ord(char) for char in chars}
print(ascii_values)  # 输出: {'a': 97, 'b': 98, 'c': 99}

输出:
在这里插入图片描述

2.2 字典推导式中带if的判断的例子:
# 原始的学生成绩字典
grades = {
    'Alice': 89,
    'Bob': 72,
    'Charlie': 59,
    'Diana': 65,
    'Eva': 55
}

# 使用字典推导式创建一个新字典,只包含及格的学生
passing_grades = {student: score for student, score in grades.items() if score >= 60}
print(passing_grades)  # 输出: {'Alice': 89, 'Bob': 72, 'Diana': 65}

输出:
在这里插入图片描述

3.集合推导式 (Set Comprehension)

集合推导式用于创建集合,其结构与列表推导式相似:

{expression for item in iterable if condition}

与列表推导式不同的是,集合推导式会生成一个集合,集合内的元素是唯一的。

3.1 举例:

# 生成一个包含某个列表中各个元素平方的集合
numbers = [1, 2, 2, 3, 4, 4, 4]
unique_squares = {x**2 for x in numbers}
print(unique_squares)  # 输出: {16, 1, 4, 9}

输出:
在这里插入图片描述

总结

优点:
简洁性:推导式可以用单行代码替代多行的循环语句,从而使代码更加简洁、清晰。
易读性:对于熟悉Python语言的开发者来说,推导式提供了一种容易理解并且直观表达序列操作的方法。
性能:推导式通常比等价的循环语句执行得更快,因为它们是优化过的内建操作。
表达力:推导式允许开发者编写出表达性强的代码,很容易将算法或逻辑表达为一个简洁的构造。
灵活性:推导式可以嵌套使用,允许进行复杂的计算。
缺点:
可读性:对于不熟悉推导式的人来说,过于复杂的推导式可能难以理解,从而降低代码的可读性。
滥用:推导式很容易被滥用,尤其是嵌套推导式,可能导致代码难以维护。
内存消耗:列表推导式会产生完整的列表,如果数据集很大,可能会占用大量内存。在这种情况下,使用生成器表达式(generator expression)可能会是更好的选择,因为生成器表达式是惰性求值的。
调试难度:推导式是一个单行构造,这可能使得调试变得困难,因为不能在推导式内部设置断点。
限制:推导式虽然强大,但并不总是适应所有情况。当逻辑变得过于复杂,需要多个嵌套循环或多个条件判断时,使用传统循环可能会更加合适。

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值