PYTHON基础技能 – 12个find()函数在Python中的创意实践

释放双眼,带上耳机,听听看~!

1. 基础探秘:找呀找,找到第一个!


1
text&nbsp;=&nbsp;"Hello,&nbsp;Python&nbsp;world!"<br>index&nbsp;=&nbsp;text.find("Python")<br>print(f"Python&nbsp;开始于:&nbsp;{index}")

简单吧?

1
find()

函数就像探照灯,一照就告诉你,“Python”从第7个字符开始它的旅程。

2. 不见不散:找不到也得说一声


1
absent&nbsp;=&nbsp;text.find("Java")<br>if&nbsp;absent&nbsp;==&nbsp;-1:<br>&nbsp;&nbsp;&nbsp;&nbsp;print("Java? 这里没有它的身影哦。")

如果“Java”是你要找的宝藏,对不起,Python的世界里它不存在,

1
find()

会带着-1回来。

3. 多次邂逅:第一次不够,再来一次!


1
text&nbsp;=&nbsp;"Mississippi"<br>first_m&nbsp;=&nbsp;text.find("i")<br>second_m&nbsp;=&nbsp;text.find("i",&nbsp;first_m&nbsp;+&nbsp;1)<br>print(f"第一个'i'后再次遇到'i'是在:&nbsp;{second_m}")

想要连续找?第二个参数就是起始查找位置,这不,“i”们又见面了。

4. 范围游戏:限定区域,精准打击


1
slice_text&nbsp;=&nbsp;text&#091;0:7]<br>position&nbsp;=&nbsp;slice_text.find("ss")<br>print(f"在'Mississippi'的前7个字符中,'ss'在:&nbsp;{position}")

只在前7个字符玩捉迷藏,

1
find()

也能精准定位“ss”。

5. 空白不是障碍:忽略前后空白


1
white_space&nbsp;=&nbsp;"&nbsp;&nbsp;&nbsp;Python&nbsp;&nbsp;&nbsp;"<br>clean_start&nbsp;=&nbsp;white_space.strip().find("Python")<br>print(f"去除空白后,Python开始于:&nbsp;{clean_start}")

前后空格?不存在的,先strip一下,再找找看。

6. 字符串中的数字侦探


1
mixed&nbsp;=&nbsp;"Age:&nbsp;28,&nbsp;Height:&nbsp;175cm"<br>age_start&nbsp;=&nbsp;mixed.find("28")<br>print(f"年龄开始的位置:&nbsp;{age_start}")

数字也能被找到,

1
find()

在字符串中无处不在的侦探。

7. 切片小技巧:动态查找


1
dynamic_search&nbsp;=&nbsp;"abcdefg"<br>char_to_find&nbsp;=&nbsp;"d"<br>start&nbsp;=&nbsp;0<br>while&nbsp;True:<br>&nbsp;&nbsp;&nbsp;&nbsp;found&nbsp;=&nbsp;dynamic_search&#091;start:].find(char_to_find)<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;found&nbsp;==&nbsp;-1:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"{char_to_find}在位置:&nbsp;{found&nbsp;+&nbsp;start}")<br>&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;+=&nbsp;found&nbsp;+&nbsp;1

循环查找,直到找不到为止,动态查找,永不言弃。

8. 分隔符的盛宴:找分隔符的间隔


1
csv_data&nbsp;=&nbsp;"apple,banana,grape"<br>comma_positions&nbsp;=&nbsp;&#091;csv_data.find(",",&nbsp;pos)&nbsp;for&nbsp;pos&nbsp;in&nbsp;range(len(csv_data))&nbsp;if&nbsp;csv_data&#091;pos]&nbsp;==&nbsp;","]<br>print(f"逗号出现的位置:&nbsp;{comma_positions}")

逗号在哪里?列表推导式和

1
find()

联手,一网打尽!

9. 替换前的侦查:统计出现次数


1
word&nbsp;=&nbsp;"hello&nbsp;hello&nbsp;world"<br>count_hello&nbsp;=&nbsp;word.count("hello")&nbsp;&nbsp;<em>#&nbsp;借助count来辅助,find虽然不能直接计数,但我们可以间接利用</em><br>print(f"'hello'出现了{count_hello}次。")

虽然本职不是计数,但通过多次查找,也能间接知道次数。

10. 链接的智慧:多个条件串联查找


1
url&nbsp;=&nbsp;"https://www.example.com/path/to/resource"<br>protocol_end&nbsp;=&nbsp;url.find("//")&nbsp;+&nbsp;2<br>path_start&nbsp;=&nbsp;url.find("/",&nbsp;protocol_end)<br>print(f"路径开始于:&nbsp;{path_start}")

层层递进,从协议到路径,

1
find()

让你轻松解析URL。

11. 特殊字符也爱找:转义字符的使用


1
escape_example&nbsp;=&nbsp;"Let's&nbsp;use&nbsp;\\n&nbsp;for&nbsp;newline."<br>new_line_pos&nbsp;=&nbsp;escape_example.find("\\n")<br>print(f"找到换行符的表示位置:&nbsp;{new_line_pos}")

别忘了,特殊字符前面要加反斜杠,让Python知道你的意图。

12. 省略号的秘密:找…的踪迹


1
ellipsis_text&nbsp;=&nbsp;"This&nbsp;is...&nbsp;a&nbsp;mystery."<br>ellipsis_loc&nbsp;=&nbsp;ellipsis_text.find("...")<br>print(f"省略号的位置:&nbsp;{ellipsis_loc}")

省略号也能被轻易发现,故事未完,待续…


实用技巧和注意事项

13. 不遗漏的全范围搜索

有时你可能需要遍历整个字符串多次,但每次从不同的位置开始。一个优雅的方法是结合循环和递增起始位置:


1
text_search&nbsp;=&nbsp;"repeated&nbsp;word&nbsp;repeated"<br>search_word&nbsp;=&nbsp;"repeated"<br>positions&nbsp;=&nbsp;&#091;]<br>start&nbsp;=&nbsp;0<br>while&nbsp;True:<br>&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;text_search.find(search_word,&nbsp;start)<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;pos&nbsp;==&nbsp;-1:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br>&nbsp;&nbsp;&nbsp;&nbsp;positions.append(pos)<br>&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;pos&nbsp;+&nbsp;len(search_word)&nbsp;&nbsp;<em>#&nbsp;确保下一次搜索从当前匹配的末尾之后开始</em><br>print(f"'{search_word}'出现在:&nbsp;{positions}")

14. 安全的替换操作前奏

在进行字符串替换之前,检查目标子串是否存在可以避免不必要的错误。比如,使用

1
find()

来决定是否执行

1
replace()


1
original&nbsp;=&nbsp;"The&nbsp;quick&nbsp;brown&nbsp;fox&nbsp;jumps&nbsp;over&nbsp;the&nbsp;lazy&nbsp;dog."<br>to_replace&nbsp;=&nbsp;"fox"<br>replacement&nbsp;=&nbsp;"cat"<br>if&nbsp;original.find(to_replace)&nbsp;!=&nbsp;-1:<br>&nbsp;&nbsp;&nbsp;&nbsp;modified&nbsp;=&nbsp;original.replace(to_replace,&nbsp;replacement)<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"修改后:&nbsp;{modified}")<br>else:<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"'{to_replace}'不在文本中,无需替换。")

15. 利用
1
find()

进行简单的模式匹配

虽然正则表达式(

1
re

模块)更适合复杂的模式匹配,但在简单的场景下,结合

1
find()

可以快速实现基本的模式识别,比如检查字符串是否以特定字符或短语开始:


1
email&nbsp;=&nbsp;"example@example.com"<br>if&nbsp;email.find("@")&nbsp;&gt;&nbsp;0&nbsp;and&nbsp;email.endswith(".com"):&nbsp;&nbsp;<em>#&nbsp;简单的邮箱验证</em><br>&nbsp;&nbsp;&nbsp;&nbsp;print("看起来是个有效的邮箱地址。")<br>else:<br>&nbsp;&nbsp;&nbsp;&nbsp;print("邮箱格式似乎不对哦。")

注意事项

  • 性能考量:尽管
    1
    find()

    在大多数情况下效率不错,但在处理极大字符串或频繁调用时,考虑性能影响是有必要的。

  • 区分大小写:默认情况下,
    1
    find()

    是区分大小写的,如果你需要不区分大小写的查找,可以先用

    1
    lower()

    1
    upper()

    转换字符串。

  • 空字符串:查找空字符串会返回0,这意味着查找是从字符串的开始位置开始的,这一点在某些逻辑判断时需要注意。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索