如何在 Python 中检查字符串是否包含子字符串

Jinku Hu 2023年1月30日 2019年12月13日
  1. in 操作符检查字符串是否包含子字符串
  2. str.find() 检查字符串是否包含子字符串的方法
  3. str.index() 检查字符串是否包含子字符串的方法
  4. 子字符串检查方法结论
如何在 Python 中检查字符串是否包含子字符串

我们经常需要检查给定的字符串是否包含特定的子字符串。我们将在此处列出一些方法,然后比较运行时间性能以选择最有效的方法。

我们将字符串- It is a given string 作为给定字符串,given 是要检查的子字符串。

in 操作符检查字符串是否包含子字符串

in 操作符是成员资格检查运算符。x in y 评估为 True 如果 xy 的成员,或者换句话说,y 包含 x

如果字符串 y 包含子字符串 x,则返回 True

>>> "given" in "It is a given string"
True
>>> "gaven" in "It is a given string"
False

in 操作符性能

import timeit

def in_method(given, sub):
    return sub in given

print(min(timeit.repeat(lambda: in_method('It is a given string', 'given')))
0.2888628

str.find() 检查字符串是否包含子字符串的方法

find 是一个内置的 string 方法 - str.find(sub)

假如 sub 被发现,它返回 str 的最小的索引,否则如果 sub 没有找到的话,返回 -1

>>> givenStr = 'It is a given string'
>>> givenStr.find('given')
8
>>> givenStr.find('gaven')
-1

str.find() 方法性能

import timeit

def find_method(given, sub):
    return given.find(sub)

print(min(timeit.repeat(lambda: find_method('It is a given string', 'given'))))
0.42845349999999993

str.index() 检查字符串是否包含子字符串的方法

str.index(sub) 是一个 string 内置方法,该方法返回找到 sub 位置的 str 最低索引。如果找不到 sub 子字符串,它将报错 ValueError

>>> givenStr = 'It is a given string'
>>> givenStr.index('given')
8
>>> givenStr.index('gaven')
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    givenStr.index('gaven')
ValueError: substring not found

str.index() 方法性能

import timeit

def find_method(given, sub):
    return given.find(sub)

print(min(timeit.repeat(lambda: find_method('It is a given string', 'given'))))
0.457951

子字符串检查方法结论

  1. 你应该使用 in 运算符来检查子字符串是否存在于给定的字符串中,因为它是最快的
  2. str.find() 以及 str.index() 也可以使用,但不是最优的,因为它们时间性能表现不佳
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - Python String