Python中str的index方法如何工作?下述特殊代码运行逻辑是什么?
代码逻辑拆解
你疑惑的"123456789"["8" in values:].index可以拆为三层逻辑逐次执行:
- 第一步执行
"8" in values判断:Python中布尔值本质是整数,False对应0,True对应1。你的示例values中没有"8",所以返回False也就是0。 - 第二步执行字符串切片:切片语法
str[start:]会返回从start索引到末尾的子串,这里start就是上面得到的0,所以切片结果就是原字符串"123456789"。如果values中存在"8",start就是1,切片结果为"23456789"。 - 第三步取方法引用:
.index是取切片后得到的字符串的内置index方法,赋值给index变量,后续sorted时可以直接把这个方法作为排序key调用。
str.index方法的工作原理
str.index(sub[, start[, end]])是字符串的内置查找方法,规则如下:
- 接收要查找的子串sub作为必填参数,可选start、end参数限定查找范围,默认查询整个字符串
- 找到子串时返回它在字符串中第一次出现的正整数索引(从0开始计数)
- 找不到子串时直接抛出
ValueError异常,这是它和str.find()的核心区别(find找不到返回-1)
整段代码的运行结果
你的示例中sorted会把values里的每个元素传入index方法,得到对应的索引:
"1"对应索引0、"3"对应索引2、"6"对应索引5、"7"对应索引6、"9"对应索引8,按索引从小到大排序后,最终输出为['1', '3', '6', '7', '9']。
如果values里包含"8",切片就会跳过第一个字符"1",此时如果values里同时有"1",调用index就会抛出异常。
内容的提问来源于stack exchange,提问作者sinder
相关产品推荐
相关产品推荐

