Python如何检查指定值是否存在于二维列表的某一列中
检查二维列表指定列是否存在指定值的最优实现方案
方案1:纯Python原生实现(无第三方依赖,性能最优)
不需要提取整列所有数据,用短路求值的生成器表达式即可实现,找到第一个匹配项就会立刻停止遍历,性能远高于先提取全列再判断的写法:
# target 为要查找的目标值,col_idx 为指定列的索引(Python默认从0开始计数) def is_in_column(target, col_idx, two_d_list): return any(row[col_idx] == target for row in two_d_list) # 对应你的需求:检查4是否在第2列(如果是1起始计数的列号,这里索引要改成1) numbers = [ [5, 3, 0, 0, 7, 0, 0, 0, 0], [6, 0, 0, 1, 9, 5, 0, 0, 0], [0, 9, 8, 0, 0, 0, 0, 6, 0], [8, 0, 0, 0, 6, 0, 0, 0, 3], [4, 0, 0, 8, 0, 3, 0, 0, 1], [7, 0, 0, 0, 2, 0, 0, 0, 6], [0, 6, 0, 0, 0, 0, 2, 8, 0], [0, 0, 0, 4, 1, 9, 0, 0, 5], [0, 0, 0, 0, 8, 0, 0, 7, 9], ] if is_in_column(4, 2, numbers): print("dang")
如果要实现你想要的numbers.columns[col]调用风格,可以简单封装类实现:
class List2D: def __init__(self, data): self.data = data self.columns = ColumnsAccessor(self.data) class ColumnsAccessor: def __init__(self, data): self.data = data def __getitem__(self, col_idx): # 返回生成器,遍历才取值,节省内存 return (row[col_idx] for row in self.data) # 使用示例 numbers = List2D(numbers) if 4 in numbers.columns[2]: print("dang")
方案2:numpy实现(适合高频矩阵操作、大数据量场景)
如果项目允许引入第三方依赖,用numpy的向量化操作性能更高,写法也更简洁:
import numpy as np # 二维列表转numpy数组 arr = np.array(numbers) # [:, col_idx] 表示取所有行的第col_idx列 if 4 in arr[:, 2]: print("dang")
方案选择建议
- 仅单次判断、不想引入额外依赖:选方案1的生成器表达式写法
- 频繁对二维列表做行列操作、数据量过万:选方案2的numpy实现
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

