当前位置: 首页 > news >正文

15、Python面试题解析:列表推导式-条件推导与嵌套推导

1. 列表推导式简介

列表推导式(List Comprehension)是 Python 中一种简洁的创建列表的方式。它允许我们通过一行代码生成列表,通常比传统的 for 循环更简洁、更易读。

基本语法
[表达式 for 元素 in 可迭代对象]
  • 表达式:对元素的处理逻辑。
  • 元素:从可迭代对象中取出的每个元素。
  • 可迭代对象:如列表、元组、字符串等。
示例
# 生成 0 到 9 的平方列表
squares = [x ** 2 for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

2. 条件推导

条件推导允许我们在列表推导式中加入条件判断,只保留满足条件的元素。

语法
[表达式 for 元素 in 可迭代对象 if 条件]
  • 条件:一个布尔表达式,只有满足条件的元素才会被处理并加入列表。
示例 1:过滤偶数
# 生成 0 到 9 中的偶数列表
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # 输出: [0, 2, 4, 6, 8]
示例 2:过滤字符串
# 过滤出包含字母 'a' 的单词
words = ["apple", "banana", "cherry", "date"]
filtered_words = [word for word in words if 'a' in word]
print(filtered_words)  # 输出: ['apple', 'banana', 'date']
示例 3:结合条件处理
# 生成 0 到 9 中偶数的平方列表
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)  # 输出: [0, 4, 16, 36, 64]

3. 嵌套推导

嵌套推导允许我们在列表推导式中使用多层循环,生成更复杂的列表。

语法
[表达式 for 外层元素 in 可迭代对象 for 内层元素 in 外层元素]
  • 外层元素:从外层可迭代对象中取出的元素。
  • 内层元素:从外层元素中取出的元素。
示例 1:生成二维列表
# 生成一个 3x3 的二维列表
matrix = [[i * 3 + j for j in range(3)] for i in range(3)]
print(matrix)
# 输出: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
示例 2:扁平化二维列表
# 将二维列表扁平化为一维列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
示例 3:生成笛卡尔积
# 生成两个列表的笛卡尔积
colors = ["red", "green"]
sizes = ["S", "M", "L"]
cartesian_product = [(color, size) for color in colors for size in sizes]
print(cartesian_product)
# 输出: [('red', 'S'), ('red', 'M'), ('red', 'L'), ('green', 'S'), ('green', 'M'), ('green', 'L')]

4. 条件推导与嵌套推导的结合

条件推导和嵌套推导可以结合使用,生成更复杂的列表。

示例 1:过滤嵌套列表中的元素
# 过滤出二维列表中大于 5 的元素
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
filtered = [num for row in matrix for num in row if num > 5]
print(filtered)  # 输出: [6, 7, 8, 9]
示例 2:生成满足条件的笛卡尔积
# 生成笛卡尔积,并过滤出颜色为 "red" 的组合
colors = ["red", "green"]
sizes = ["S", "M", "L"]
filtered_cartesian = [(color, size) for color in colors for size in sizes if color == "red"]
print(filtered_cartesian)
# 输出: [('red', 'S'), ('red', 'M'), ('red', 'L')]

5. 列表推导式的性能

列表推导式通常比传统的 for 循环更快,因为它是用 C 语言实现的,具有更高的执行效率。但在处理非常大的数据集时,列表推导式可能会占用大量内存,因为它会一次性生成整个列表。

示例:生成大列表
# 生成一个包含 100 万个元素的列表
big_list = [x for x in range(1000000)]

6. 总结

列表推导式是 Python 中一种强大的工具,可以简洁地生成列表。通过条件推导和嵌套推导,我们可以实现更复杂的逻辑。以下是关键点:

  • 条件推导:通过 if 条件过滤元素。
  • 嵌套推导:通过多层循环生成复杂列表。
  • 性能:列表推导式通常比 for 循环更快,但可能占用更多内存。

通过合理使用列表推导式,可以编写出简洁高效的代码。

相关文章:

  • Unity UI个人总结
  • jsp页面跳转失败
  • 云原生周刊:DeepSeek 颠覆人工智能
  • R语言的软件开发工具
  • 通达信如何导出以往的分时数据
  • Dockfile语法
  • STC 51单片机62——极简 4x4x4光立方
  • 排序之选择排序(C# C++)
  • 蓝桥杯-洛谷刷题-day5(C++)(为未完成)
  • COMDEL电源CDX1000 13.56MHz 2MHz DUAL RF GENERATOR手侧
  • 天地图(uniapp)搜索、定位自己、获取标记点的经纬度
  • 数据结构 day06
  • 【Qt 比较常用的字符串处理函数】查找、比较、转换、截取、替换、插入、删除、格式化、分割、比较排序
  • VSCode Error Lens插件介绍(代码静态检查与提示工具)(vscode插件)
  • 前端实现在PDF上添加标注(1)
  • D365(Dynamics 365 CE/PO)审计记录(Audit)一点点分析
  • linux下c++连接mysql
  • 数据结构:哈夫曼树
  • 【SpringBoot实现全局API限频】 最佳实践
  • Ceph集群搭建2025(squid版)
  • 网站建设 好的公司/品牌营销策划与管理
  • 政府网站功能/软文推广模板
  • 做一般的公司网站需要多少钱/怎样查询百度收录和排名情况
  • 哪家微信网站建设好/开发做一个网站需要多少钱
  • 如东做网站的公司/南昌seo公司
  • 在百度怎么申请自己的网站/专业的seo搜索引擎优化培训