Python中使用upper()后find函数始终返回-1的问题求助
解决find()始终返回-1的问题
我尝试编写一个解析程序并使用find函数,但无论搜索什么内容,该函数始终返回-1。相关代码如下:
doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"] for word in doc_list: word.upper() word.find("A")运行输出为:
'THE LEARN PYTHON CHALLENGE CASINO.' -1 'THEY BOUGHT A CAR' -1 'CASINOVILLE' -1
嘿,这个问题其实很常见——核心是你忽略了Python字符串的一个关键特性:字符串是不可变的。
咱们一步步拆解:
- 当你调用
word.upper()时,它并不会直接修改原字符串word,而是生成一个全新的全大写字符串。但你没有把这个新字符串存下来,所以后续的word.find("A")还是在原来的小写/混合大小写字符串里找大写的"A",当然找不到啦!
修正方案
只需要把upper()的结果赋值给一个变量(或者直接覆盖原变量),就能正确查找了:
doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"] for word in doc_list: # 把大写后的字符串存起来 upper_version = word.upper() # 在大写后的字符串里找"A" match_index = upper_version.find("A") # 打印结果 print(f"{upper_version} {match_index}")
或者更简洁的写法:
doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"] for word in doc_list: upper_version = word.upper() print(f"{upper_version} {upper_version.find('A')}")
修正后的运行结果
这样就能得到正确的索引了:
THE LEARN PYTHON CHALLENGE CASINO. 27 THEY BOUGHT A CAR 10 CASINOVILLE -1
(最后一个字符串CASINOVILLE本身确实没有"A",所以返回-1是正常的哦)
内容的提问来源于stack exchange,提问作者givonz
相关产品推荐
相关产品推荐

