如何在 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