pin_drop当前位置:知识文库 ❯ 图文

Python列表推导式


概述

列表推导式(List Comprehension)是 Python 中一种简洁优雅的创建列表的方式。它将循环和条件判断浓缩在一行表达式中,使代码更加简洁、可读。列表推导式是 Python 最具特色的语法之一,掌握它可以大幅提升编码效率。


基本语法

代码示例

[expression for item in iterable]
部分 说明
expression 对每个元素执行的表达式
item 迭代变量
iterable 可迭代对象

基本用法

创建平方列表

代码示例

squares = [x ** 2 for x in range(1, 6)]
print(squares)

输出:

代码示例

[1, 4, 9, 16, 25]

转换元素类型

代码示例

nums = [1, 2, 3, 4, 5]
strs = [str(x) for x in nums]
print(strs)

输出:

代码示例

['1', '2', '3', '4', '5']

带条件判断

代码示例

[expression for item in iterable if condition]

过滤偶数

代码示例

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [x for x in nums if x % 2 == 0]
print(evens)

输出:

代码示例

[2, 4, 6, 8, 10]

带条件表达式

代码示例

nums = [1, 2, 3, 4, 5]
labels = ["偶" if x % 2 == 0 else "奇" for x in nums]
print(labels)

输出:

代码示例

['奇', '偶', '奇', '偶', '奇']

嵌套推导式

展开嵌套列表

代码示例

nested = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for sub in nested for x in sub]
print(flat)

输出:

代码示例

[1, 2, 3, 4, 5, 6, 7, 8, 9]

提示:嵌套推导式的阅读顺序:从左到右,等同于嵌套 for 循环的从外到内。

生成组合

代码示例

pairs = [(x, y) for x in range(1, 4) for y in range(1, 4) if x != y]
print(pairs)

输出:

代码示例

[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

与 for 循环对比

代码示例

# 使用 for 循环
squares = []
for x in range(1, 6):
    squares.append(x ** 2)

# 使用列表推导式
squares = [x ** 2 for x in range(1, 6)]
特性 for 循环 列表推导式
代码量 较多 简洁
可读性 逻辑清晰 简单场景更清晰
性能 略慢 略快(底层优化)
复杂逻辑 适合 不适合

常见应用场景

字符串处理

代码示例

words = ["Hello", "World", "Python"]
lower = [w.lower() for w in words]
print(lower)

输出:

代码示例

['hello', 'world', 'python']

字典转列表

代码示例

person = {"name": "Alice", "age": 25, "city": "Beijing"}
pairs = [f"{k}={v}" for k, v in person.items()]
print(pairs)

输出:

代码示例

['name=Alice', 'age=25', 'city=Beijing']

文件名过滤

代码示例

files = ["data.csv", "image.png", "report.csv", "logo.jpg"]
csv_files = [f for f in files if f.endswith(".csv")]
print(csv_files)

输出:

代码示例

['data.csv', 'report.csv']

注意事项

警告:不要过度使用:当推导式过于复杂时,可读性会大幅下降,此时应使用普通 for 循环。

警告:避免副作用:列表推导式应只用于创建列表,不要在其中执行有副作用的操作(如修改外部变量)。

警告:内存问题:列表推导式会一次性生成所有元素,大数据量时考虑使用生成器表达式 (...) 代替 [...]


小结

  • 列表推导式用一行代码创建列表,语法简洁优雅

  • 支持条件过滤和嵌套循环

  • 简单场景优于 for 循环,复杂逻辑应避免使用

  • 大数据量考虑使用生成器表达式节省内存


练习题

练习1

使用列表推导式生成一个包含 1 到 100 中所有能被 3 整除但不能被 5 整除的数字的列表。

练习2

给定字符串列表 words = ["hello", "", "world", "", "python", ""],使用列表推导式删除空字符串,并将非空字符串首字母大写。

常见问题

列表推导式和 for 循环有什么区别?

列表推导式代码更简洁、性能略快(底层优化),适合简单场景;for 循环逻辑更清晰,适合复杂逻辑。选择时优先考虑可读性。

列表推导式可以嵌套吗?

可以。嵌套推导式的阅读顺序从左到右,等同于嵌套 for 循环从外到内。但注意不要过度嵌套,以免影响可读性。

大数据量时使用列表推导式会有内存问题吗?

会。列表推导式会一次性生成所有元素,处理大数据量时建议使用生成器表达式 (...) 代替 [...],以节省内存。

标签: 列表推导式 Python基础 列表操作 Python技巧 编程入门 代码优化

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python列表clear方法 下一篇: Python列表嵌套

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。