苦练Python第28天:列表推导式
前言
大家好,我是倔强青铜三 。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 苦练Python 第 28 天!今天解锁 列表推导式------把多行循环浓缩成一行,代码瞬间优雅又高效。🚀
📦 今日收获清单
- 列表推导式语法与核心优势
- 条件过滤
if
/if-else
写法 - 嵌套列表展开技巧
- 真实场景:提取数字、过滤邮箱、去重等
- 额外彩蛋:字典推导式 & 集合推导式
🧱 什么是列表推导式?
一句话:用一行代码生成列表 。
等价于 for
循环 + append
,但更短更快。
🔹 基本语法
python
[表达式 for 变量 in 可迭代对象]
相当于:
python
result = []
for 变量 in 可迭代对象:
result.append(表达式)
🔍 示例 1:平方数
✅ 传统写法
python
squares = []
for i in range(5):
squares.append(i ** 2)
✅ 一行写法
python
squares = [i ** 2 for i in range(5)]
🔍 示例 2:批量转大写
python
names = ["alice", "bob", "charlie"]
upper_names = [name.upper() for name in names]
print(upper_names) # ['ALICE', 'BOB', 'CHARLIE']
❓ 为什么用推导式?
- ✅ 更短、更清晰
- ✅ 执行更快
- ✅ 可读性高(简单场景)
🔀 条件过滤
🔸 语法
python
[表达式 for 变量 in 可迭代对象 if 条件]
示例:只留偶数
python
evens = [i for i in range(10) if i % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
🔄 表达式里写 if-else
python
labels = ["even" if i % 2 == 0 else "odd" for i in range(5)]
print(labels) # ['even', 'odd', 'even', 'odd', 'even']
🔁 嵌套列表推导式
示例:二维列表展平
python
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [num for row in matrix for num in row]
print(flattened) # [1, 2, 3, 4, 5, 6]
🧪 实战场景
✅ 1. 提取字符串中的数字
python
text = "Age: 24, Score: 89"
digits = [char for char in text if char.isdigit()]
print(digits) # ['2', '4', '8', '9']
✅ 2. 过滤有效邮箱
python
emails = ["a@gmail.com", "b@site", "c@yahoo.com"]
valid = [email for email in emails if "@" in email and "." in email]
print(valid) # ['a@gmail.com', 'c@yahoo.com']
✅ 3. 列表去重
python
data = [1, 2, 2, 3, 4, 4]
unique = list({x for x in data})
print(unique) # [1, 2, 3, 4]
🧠 技巧 & 最佳实践
- 👍 简单转换优先用推导式
- 🚫 避免过度嵌套,复杂逻辑用循环保证可读
- 🧹 保持一行不超 80 字符,必要时换行
📚 彩蛋:字典 & 集合推导式
🧾 字典推导式
python
squares = {x: x ** 2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
🔁 集合推导式
python
unique = {char for char in "hello"}
# {'h', 'e', 'l', 'o'}
🧭 今日复盘
- 掌握一行生成列表的写法
- 会用
if
/if-else
做过滤与映射 - 能展开二维列表、提取数字、过滤邮箱
- 顺手学会字典 & 集合推导式
最后感谢阅读!欢迎关注我,微信公众号 :
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!