2022年 11月 9日

Python小知识:查找子串

查找子串

查找一个字符串中是否包含某个关键词(查找子串问题)是很常见的操作。比如:给定一句话s,查找s中是否包含关键词王嘉尔

今天来说3个相关的方法,以及它们的区别和优缺点。

in 操作符

如果只是为了判断s中是否包含王嘉尔,最推荐的做法是用in或者not in操作符:

s = '王嘉尔小时候卖过猪'
print('王嘉尔' in s)

s2 = '王嘉尔小时候吃过猪'
print('王嘉尔' in s2)
  • 1
  • 2
  • 3
  • 4
  • 5

in操作符返回True或者False,而且运行最快,是首选!

咱们加深一下,每一个Python的操作符背后都有一个魔法方法。当我们使用in操作符的时候,它调用的是__contains__方法。

如果我们自己定义一个类,也要支持innot in运算符,只要实现__contains__方法就可以了。

find函数

s = '王嘉尔小时候卖过猪'
print(s.find('王嘉尔'))
print(s.find('王嘉尔') != -1)

s2 = '王嘉尔小时候吃过猪'
print(s2.find('王嘉尔'))
print(s2.find('王嘉尔') != -1)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行结果:

0
True
-1
False
  • 1
  • 2
  • 3
  • 4

find函数返回子串的下标,如果找不到就返回-1。s中包含王嘉尔,返回下标0。我们可以通过比较返回值和-1来确定是否包含子串。

index函数

index函数和find类似,也是返回子串在父串中的下标:

s = '王嘉尔小时候卖过猪'
print(s.index('王嘉尔'))
print(s.index('王嘉尔') != -1)
  • 1
  • 2
  • 3

运行结果是:

0
True
  • 1
  • 2

但是index和find有个大的差别,如果父串中没有包含子串,会报ValueError。

看下面的代码:

s2 = '王嘉尔小时候吃过猪'
print(s2.index('王嘉尔'))
  • 1
  • 2

运行结果是:

ValueError: substring not found
  • 1

看起来index比较弱,为什么它还有存在的价值呢?因为index是序列(sequence)的方法,在字符串,列表,元组中都可以用,而find是字符串特有的函数。

总结一下:如果只是看是否存在,直接用in操作符;如果还要找出下标,用find不会报错,但是index可以应用的范围更广。

职业发展

作为一个代码打工仔,对于绝大部分程序员来说,想要成为牛逼的真正挣钱程序员的路还很长,一刻都不能懈怠。

我们无法从HR角度,或者技术leader的角度来臆测哪种状态的面试更能获取面试官青睐。但通过我们积攒的大量的面试经验,大家多少可以推断一些成为有竞争力的程序员的一些必要条件。

大佬云集、资料丰富

当初我在字节认识一个非常非常资深的前辈,他到字节比我早三年,但因为各种原因级别不是很高。我当时问他,既然你对现状如此不满,为什么不想着离开寻找更好的机会呢?

他沉思了片刻跟我说,他说我现在在这里虽然待着不顺心,但是我接触到的人都是非常优秀的。我遇到问题,还可以和你们讨论讨论。我如果出去了,我要是再遇到问题,可能连一个讨论的人都没有。

我当时听听只是觉得有道理,现在再回想起来,感受非常深刻。三观、格局、能力,能够进入大公司的,这三个方面一般都不会太差。别的不说,就拿个人能力而言,我曾出国出差过几个月,有幸见识了许多各种海外名校的同事,和他们学习交流人工智能,这真的让我AI有了更深层次的认识。

除了优秀的同事之外,大公司里往往还有丰富的内部文档和资料。我当时在字节内部看到了很多优秀的文章,也有很多优秀的技术沙龙和分享。现在想起来两年下来,也没有去过几次,文章和资料看得也不算多,现在想想颇为遗憾。别的不说,就拿推荐领域而言,近些年质量不错的论文往往都来源于大公司尤其是国内的大公司,以腾讯、华为和头条为主。除了公开的论文,公司内部还有很多技术相关的资料和文档,这些真的可以说是有价无市,非常珍贵。

Python 知识手册

Linux 知识手册

爬虫查询手册

而且,这些资料不是扫描版的,里面的文字都可以直接复制,非常便于我们学习:

数据分析知识手册:

机器学习知识手册:

金融量化知识手册:

岗位内推、学习交流

我们大量需要前端岗位、python岗位、Java 岗位、Android 和 iOS 的开发岗位,工作地点:北京字节,欢迎校招社招扫描下方二维码找我内推

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,添加官方客服斯琪