
本文介绍如何使用 python 集合推导式,从嵌套列表中简洁、高效地提取所有值为 1 的元素坐标(行索引, 列索引),避免冗长循环,提升代码可读性与执行效率。
本文介绍如何使用 python 集合推导式,从嵌套列表中简洁、高效地提取所有值为 1 的元素坐标(行索引, 列索引),避免冗长循环,提升代码可读性与执行效率。
在处理二维数据结构(如矩阵或网格)时,常需定位特定值的位置。例如,给定一个由 0 和 1 构成的二维列表,快速获取所有 1 所在的 (行, 列) 坐标是常见需求。传统方式需嵌套 for 循环配合 enumerate(),而 Python 的集合推导式(set comprehension) 能以单行代码优雅实现该逻辑。
以下为推荐解法:
matrix = [[0, 0, 1],
[1, 0, 0],
[0, 1, 0]]
coordinates = {(row_idx, col_idx)
for row_idx, row in enumerate(matrix)
for col_idx, value in enumerate(row)
if value == 1}
print(coordinates) # 输出: {(0, 2), (1, 0), (2, 1)}该表达式利用双重 enumerate() 实现二维索引遍历:外层获取行索引 row_idx 和整行 row,内层对每行遍历获取列索引 col_idx 和对应 value;if value == 1 过滤条件确保仅收集目标位置;花括号 {} 构造的是集合(set),天然去重且无序,符合坐标唯一性要求。
⚠️ 注意事项:
- 避免使用 list 作为变量名(如原问题中 list = [...]),这会覆盖内置类型 list,引发潜在错误。应改用 matrix、grid 或 data 等语义化名称。
- 若需保持插入顺序(如按行优先顺序排列),可改用列表推导式 [(row_idx, col_idx) for ...],但结果为列表而非集合。
- 对于大型矩阵,该推导式时间复杂度为 O(m×n),已是最优遍历复杂度,无需额外优化。
总结:集合推导式不仅语法简洁,还体现了 Python 的声明式编程思想——专注“要什么”,而非“如何一步步做”。掌握此模式,可显著提升处理网格、图像像素、稀疏矩阵等场景的开发效率。

















