告别循环: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 列表推导式的基本概念和用法,多多练习,让你的代码更上一层楼!

相关推荐
其美杰布-富贵-李2 小时前
TensorBoard 与 WandB 在 PyTorch Lightning 中的完整指南
人工智能·pytorch·python·监控·调优
Vic101012 小时前
Spring AOP 高级陷阱:为什么 @Before 修改参数是“伪修改“?
java·python·spring
小智RE0-走在路上2 小时前
Python学习笔记(12) --对象,类的成员方法,构造方法,其他内置方法,封装,继承,多态,类型注解
笔记·python·学习
执笔论英雄2 小时前
[RL]协程asyncio.CancelledError
开发语言·python·microsoft
a_zzzzzzzz2 小时前
Python 解释器 + Shell 脚本实现桌面打开软件
开发语言·python
小蒜学长2 小时前
python基于Python的医疗机构药品及耗材信息管理系统(代码+数据库+LW)
数据库·spring boot·后端·python
AI_56782 小时前
Python RPA解放Excel生产力
python·excel·rpa
智航GIS2 小时前
3.1 字符串(String)
开发语言·python
至此流年莫相忘2 小时前
python基础语法
前端·python