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