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相关推荐