告别循环:Python 列表推导式,让你的代码飞起来!

什么是列表推导式?🚀

列表推导式本质上就是一个简化的循环,但它更紧凑,可读性通常也更好。想象一下,你需要创建一个包含 0 到 9 的平方数的列表,用传统的 for 循环,你要这样写:

scss 复制代码
squares = []
for i in range(10):
    squares.append(i**2)
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

但是,用列表推导式,只需要一行代码:

ini 复制代码
squares = [i**2 for i in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

看见没?代码瞬间变短了!i**2 for i in range(10) 这部分就是列表推导式的核心。


列表推导式的基本结构✨

一个列表推导式通常包含以下几个部分:

  • 表达式: 你想要计算并放入新列表的值 (例如:i**2)
  • for 循环: 用于迭代一个序列 (例如: for i in range(10))
  • 可选的条件判断: 用于过滤序列中的元素 (例如:if i % 2 == 0)

完整的列表推导式结构如下:

csharp 复制代码
[expression for item in iterable if condition]

举个例子,我们想要创建一个包含 0 到 9 之间所有偶数的平方的列表:

ini 复制代码
even_squares = [i**2 for i in range(10) if i % 2 == 0]
print(even_squares)  # 输出: [0, 4, 16, 36, 64]

实际应用场景⚙️

数据清洗

假设你有一个包含字符串的列表,但有些字符串包含额外的空格,你需要去除这些空格。

scss 复制代码
strings = ["  hello  ", "world ", "  python"]
cleaned_strings = [s.strip() for s in strings]  # 用 strip() 方法去除字符串头尾空格
print(cleaned_strings)  # 输出: ['hello', 'world', 'python']

数据转换

将摄氏温度转换为华氏温度。

ini 复制代码
celsius = [0, 10, 20, 30, 40, 50]
fahrenheit = [(9/5)*c + 32 for c in celsius] # 华氏度 = 摄氏度 × 9/5 + 32
print(fahrenheit)  # 输出: [32.0, 50.0, 68.0, 86.0, 104.0, 122.0]

过滤数据

筛选出列表中大于某个值的元素。

ini 复制代码
numbers = [1, 10, 20, 30, 40, 50]
filtered_numbers = [n for n in numbers if n > 25]
print(filtered_numbers)  # 输出: [30, 40, 50]

多重循环的列表推导式🤯

列表推导式也支持嵌套循环,这允许你处理更复杂的数据结构。

比如,你想创建一个包含所有 (x, y) 坐标的列表,其中 x 的范围是 0 到 2,y 的范围是 0 到 1:

erlang 复制代码
coordinates = [(x, y) for x in range(3) for y in range(2)]
print(coordinates)  # 输出: [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]

注意,多重循环的顺序和 for 循环的顺序一致。但是!多重循环的列表推导式可能会变得难以阅读,所以要谨慎使用,确保代码清晰易懂。


列表推导式的优势和注意事项💡

优势

  • 简洁: 用一行代码代替多行 for 循环,代码更紧凑。
  • 可读性: 对于简单的转换和过滤操作,列表推导式通常比循环更容易理解。
  • 性能: 在某些情况下,列表推导式的执行效率比 for 循环更高。

注意事项

  • 过度使用: 列表推导式虽好,但不要滥用。对于过于复杂的逻辑,还是用 for 循环更清晰。
  • 可读性: 确保列表推导式易于理解。如果代码太长或太复杂,考虑拆分成多个步骤。
  • 变量名: 使用有意义的变量名,提高代码的可读性。

列表推导式和其他数据结构的结合💥

集合推导式

与列表推导式类似,只不过是使用 {} 符号,结果会生成一个集合,集合会自动去重。

ini 复制代码
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = {x for x in numbers}  # 集合会自动去重
print(unique_numbers)  # 输出: {1, 2, 3, 4, 5}

字典推导式

字典推导式使用 {}, 生成带有键值对的字典。

ini 复制代码
numbers = [1, 2, 3, 4, 5]
square_dict = {x: x**2 for x in numbers}
print(square_dict)  # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

集合推导式和字典推导式分别用于创建集合和字典,语法和列表推导式类似。

现在,你已经掌握了 Python 列表推导式的基本概念和用法,多多练习,让你的代码更上一层楼!

相关推荐
多米Domi0113 小时前
0x3f第33天复习 (16;45-18:00)
数据结构·python·算法·leetcode·链表
freepopo3 小时前
天津商业空间设计:材质肌理里的温度与质感[特殊字符]
python·材质
森叶3 小时前
Java 比 Python 高性能的原因:重点在高并发方面
java·开发语言·python
小二·4 小时前
Python Web 开发进阶实战:混沌工程初探 —— 主动注入故障,构建高韧性系统
开发语言·前端·python
Lkygo4 小时前
LlamaIndex使用指南
linux·开发语言·python·llama
小二·4 小时前
Python Web 开发进阶实战:低代码平台集成 —— 可视化表单构建器 + 工作流引擎实战
前端·python·低代码
Wise玩转AI4 小时前
团队管理:AI编码工具盛行下,如何防范设计能力退化与知识浅薄化?
python·ai编程·ai智能体·开发范式
赵谨言5 小时前
Python串口的三相交流电机控制系统研究
大数据·开发语言·经验分享·python
鹿角片ljp5 小时前
Engram 论文精读:用条件记忆模块重塑稀疏大模型
python·自然语言处理·nlp
Blossom.1185 小时前
AI Agent的长期记忆革命:基于向量遗忘曲线的动态压缩系统
运维·人工智能·python·深度学习·自动化·prompt·知识图谱