初学Python的时候,最搞混的就是index是什么函数,总把它和普通的下标取值搞混,踩了好几次实操坑。

很多人直接以为它就是取第几个数据,其实完全不是一回事,这是我写代码调试无数次摸出来的真实区别。

index函数的基础实操用法

最初写列表匹配代码时,想知道列表里某个值排在第几位,无脑用下标[]取值,结果代码完全跑不通。反复调试才发现,下标是已知位置取数值,而index函数刚好反过来,是已知数值查对应位置索引,这是它最核心的作用,只适用于列表、元组、字符串这类有序序列。

当时做学生成绩匹配的小脚本,定义了成绩列表[85,92,78,92],想要找出92分对应的位置,一开始手动数位置写代码,数据一多就出错。调用index()之后,直接填入目标数值就能返回索引,不用手动统计,效率高了很多。

它默认只返回第一个匹配到的元素索引。

就像上面的成绩列表,两个92,index函数只会给出第一个92的索引1,后面重复的数值会直接忽略,这是我踩过最频繁的坑。很多新手不知道这个特性,批量匹配数据时,会漏掉后续重复元素的位置,导致统计结果不全。

index函数的报错坑点

这是最容易翻车的地方。

只要查找的数值不在序列里,程序会直接抛出ValueError报错,强制终止运行。之前做批量数据筛查时,没做容错处理,短短十行代码因为一个不存在的数值直接崩掉,排查了半个多小时才找到问题根源。

后来才反应过来,用index函数之前,必须先判断目标值是否存在于序列中,用in语句做前置判断,就能规避这个致命报错。

index函数的限定使用范围

折腾好久才搞明白,index函数不是万能的。字典、集合这类无序数据结构,完全不能用这个函数,强行调用只会报错。

之前不懂数据结构差异,拿着集合数据调用index,反复报错却找不到原因,白白浪费很多调试时间。有序序列专属,无序数据结构不兼容,这是它的硬性使用边界。

写完那段成绩筛查脚本的深夜,关掉编辑器,脑子里只剩一行简单的代码:list.index(目标值)。