Python的“一行搞定”风格

这种"一行搞定"的风格统称为 Comprehensions(推导式) ,是 Python 最具特色的语法之一。 我们从列表推导式说起~

一、从"普通方式"创建列表说起

python 复制代码
# 传统方式
squares = []
for i in range(1, 6):
    squares.append(i ** 2)
print(squares)  # 输出: [1, 4, 9, 16, 25]

# 列表推导式
squares = [i ** 2 for i in range(1, 6)]
print(squares)  # 输出: [1, 4, 9, 16, 25]

二、拆解列表推导式

列表推导式是一种用更简洁、更 Pythonic 的方式创建列表的语法。(其实就是把传统方式换个写法)

对于上面所用到的列表推导式:

python 复制代码
# 列表推导式
squares = [i ** 2 for i in range(1, 6)]
print(squares)  # 输出: [1, 4, 9, 16, 25]

拆解一下这行代码:

  • i ** 2:这是"表达式",表示我们最终要放进列表里的东西(每个元素的值)。
  • for i in range(1, 6):这是循环部分,i 是临时变量,遍历 range(1, 6) 中的每个值。
  • 整个用方括号 [] 包起来,表示结果是一个列表

✅记住:列表推导式的结果一定是一个列表

三、加上条件判断ifelse

python 复制代码
# 过滤条件:不要奇数
even_squares = [i ** 2 for i in range(1, 6) if i % 2 == 0]
print(even_squares)  # 输出: [4, 16]

# 规则:偶数平方,奇数变成负数
results = [i ** 2 if i % 2 == 0 else -i for i in range(1, 6)]
print(results)  # 输出: [-1, 4, -3, 16, -5]

列表推导式的基本结构本来长这样:

python 复制代码
[表达式 for 临时变量 in 可迭代对象 if 条件]
  • if 放在最后,用来过滤元素。
  • 只有满足 if 条件的 i,才会被计算 表达式 并加入列表。

但是,如果要对每个元素做不同处理 (比如偶数平方,奇数变负数),就不能把 if 放在最后了。

结构变成:

python 复制代码
[表达式1 if 条件 else 表达式2 for 临时变量 in 可迭代对象]

⚠️ 注意区别:

  • if最后 :用于过滤(不满足条件的直接跳过)
  • if-else表达式位置 :用于对每个元素做不同处理(所有元素都会被处理)

四、嵌套循环(不要过度嵌套,会很难读)

python 复制代码
colors = ['红', '蓝']
sizes = ['S', 'M']

# 传统写法:
pairs = []
for c in colors:
    for s in sizes:
        pairs.append((c, s))

# 列表推导式写法:
pairs = [(c, s) for c in colors for s in sizes]
print(pairs)
# 输出: [('红', 'S'), ('红', 'M'), ('蓝', 'S'), ('蓝', 'M')]

五、一些拓展

5.1 其它推导式

5.2 生成器表达式

列表推导式会一次性生成整个列表 ,如果数据很大,可能占用很多内存。这时可以考虑用生成器表达式 (用圆括号 () 而不是 []

python 复制代码
gen = (i**2 for i in range(1, 6))
print(gen)  # <generator object ...>

# 用 for 循环取值:
for x in gen:
    print(x)  # 1, 4, 9, 16, 25

💡 重要区别:

  • [...]:立刻创建整个列表,占内存。
  • (...):只创建一个"生成器",用多少算多少,省内存,适合大数据。

六、总结一句话

列表推导式 = 用一行代码,把"循环 + 条件 + 表达式"打包成一个新列表。

相关推荐
谢景行^顾21 小时前
深度学习--激活函数
人工智能·python·机器学习
三千院本院21 小时前
LlaMA_Factory实战微调Qwen-LLM大模型
人工智能·python·深度学习·llama
wljt21 小时前
Linux 常用命令速查手册(Java开发版)
java·linux·python
WPG大大通21 小时前
AIoT | 软件:Astra MCP边缘算力构建详解
经验分享·笔记·python·硬件架构·代码
波诺波1 天前
环境管理器
linux·前端·python
诸葛思颖1 天前
把本地 Python 项目用 Git 进行版本控制并推送到 GitHub
git·python·github
测试老哥1 天前
自动化测试用例的编写和管理
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
周杰伦_Jay1 天前
【Python Web开源框架】Django/Flask/FastAPI/Tornado/Pyramid
前端·python·开源
周杰伦_Jay1 天前
【Python后端API开发对比】FastAPI、主流框架Flask、Django REST Framework(DRF)及高性能框架Tornado
数据结构·人工智能·python·django·flask·fastapi·tornado
chenchihwen1 天前
AI代码开发宝库系列:PDF文档解析MinerU
人工智能·python·pdf·dashscope