如何从列内已知数值位置向上查找目标值的首次出现行号
方案说明
你提到的两种实现思路本质是等价的,最终返回结果完全一致,以下是不同常用工具下的无循环简便实现:
1. Excel/Google 表格实现
假设你的数据存在A列,已知数值4所在行号为6(对应示例中的行号):
- 通用公式(两种思路通用):
原理:用=LOOKUP(2,1/(A1:A5=1),ROW(A1:A5))A1:A5=1生成布尔数组,取倒数后匹配不到2会自动返回最后一个符合条件的对应行号,效果等同于从4的位置向上找第一个1。
如果使用高版本Excel,也可以用XLOOKUP的倒序搜索参数实现,逻辑更直观:
最后一个参数=XLOOKUP(1,A1:A5,ROW(A1:A5),,0,-1)-1代表从下往上搜索范围,直接返回范围内最后一个1的位置。
2. Python 实现
pandas 场景
假设你已经把数据存为pandas的Series对象s,已知4的索引位置为5(pandas默认从0开始计数,对应示例第6行):
# 直接取4之前所有等于1的索引最大值即可,不需要循环 target_pos = s[s.loc[:5] == 1].index[-1] + 1 # 加1转为和示例一致的从1开始的行号
原生Python列表场景
data = [1,2,2,1,3,4,5] four_idx = 5 # 4所在的索引位置(从0开始) # 倒序遍历从four_idx往前找,第一个匹配到的就是目标,列表推导式一行实现 target_row = [i+1 for i in range(four_idx-1, -1, -1) if data[i] ==1][0]
3. SQL 实现
假设你的表名为test_data,有row_num(行号)和val(数值)两个字段,已知4对应的行号是6:
SELECT MAX(row_num) FROM test_data WHERE row_num < 6 AND val = 1;
内容的提问来源于stack exchange,提问作者Wren
相关产品推荐
相关产品推荐

