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

相关推荐
Java面试题总结17 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒17 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr
马猴烧酒.17 小时前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股
天空属于哈夫克318 小时前
Java 版:利用外部群 API 实现自动“技术开课”倒计时提醒
数据库·python·mysql
喵手18 小时前
Python爬虫实战:全站 Sitemap 自动发现 - 解析 sitemap.xml → 自动生成抓取队列的工业级实现!
爬虫·python·爬虫实战·零基础python爬虫教学·sitemap·解析sitemap.xml·自动生成抓取队列实现
luoluoal18 小时前
基于深度学习的web端多格式纠错系统(源码+文档)
python·mysql·django·毕业设计·源码
深蓝海拓18 小时前
PySide6从0开始学习的笔记(二十七) 日志管理
笔记·python·学习·pyqt
天天进步201518 小时前
Python全栈项目:实时数据处理平台
开发语言·python
Tipriest_18 小时前
Python中is关键字详细说明,比较的是地址还是值
开发语言·python
sheji341618 小时前
【开题答辩全过程】以 基于Python的餐饮统计系统的设计和实 现为例,包含答辩的问题和答案
开发语言·python