Python中的字串查詢操作方法總結

2022-09-26 18:03:14 字數 1739 閱讀 5241

基本的字串位置查詢方法

python 查詢字串使用 變數.find("要查詢的內容"[,開始位置,結束位置]),開始位置和結束位置程式設計客棧,表示要查詢的範圍,為空則表示查詢所有。查詢到後會返回位置,位置從0開始算,如果每找到則返回-1。

str = 'a,hello'

print str.find('hello') # 在字串str里查jcvgrxvzl找字串hello

>> 2 # 輸出結果

樸素匹配演算法

樸素匹配演算法是對目標字串和模板字串的一一匹配。如果匹配得上,下標向右移一位, 否則清空並重新開始匹配。

target = 'abb aba'

pattern = 'aba'

def match(target, pattern):

i = j = 0

n, m = len(target), len(pattern)

while i < n and j < m:

# 如果字元相等則目標和模板的下標都向右移

if target[i] == pattern[j]:

i, j = i+1, j+1

else:

# 如果字元不相等則目標程式設計客棧下標切換到不相等的下標

# 模板下標移動到初始下標

i = i - j + 1

j = 0

if j == m:

return i - j

return -1

把上面的加上print後列印一遍

#修改的地方

else:

程式設計客棧 i = i -j + 1

j = 0

print(target[i], pattern[j], i, j)

# 列印結果

b a 1 0

b a 2 0

a 3 0

a a 4 0

迴圈會一直到相等的匹配值, 這個方法效率低下,主要是在不匹配時會重新把模板字元迴圈一次。最多可能會出現 m * (n-m +1)次。m是模板字元的長度,n-m + 1是排除不等字元的次數。

kmp 演算法

kjcvgrxvzlmp是通過已知匹配的字元進行移位的演算法,比如上面的abb 中跟abc比較的話 ab是已知的。

def match(target, pattern):

i = j = 0

n, m = len(target), len(pattern)

while i < n and j < m:

# 如果字元相等則目標和模板的下標都向右移

if if j == -1 and target[i] == pattern[j]:

i, j = i+1, j+1

else:

# 這裡通過next 函式來判斷位移個數

i = i - j + pattern_next(pattern[:j])

j = 0

if j == m:

return i - j

return -1

def pattern_next(s):

prefix = [s[:i+1] for i in range(len(s)-1)]

suffix = [s[i+1:] for i in range(len(s)-1)]

l = list(set(prefix) & set(suffix))

return len(l)

本文標題: python中的字串查詢操作方法總結

本文位址:

python中字串操作 擷取,查詢,替換

python中,對字串的操作是最常見的,python對字串操作有自己特殊的處理方式。字串的擷取 python中對於字串的索引是比較特別的,來感受一下 s 123456789 擷取中間的兩個字元 s 1 3 輸出為 23 從某個位置到結尾 s 4 輸出為 56789 字串的順序不僅僅可以順著數,也可以...

python 字串 查詢 基本操作

獲取 指定 公司 的相關資訊 公司資訊 格式 都一致 公司名 排名 薪資 所佔比例 huawei 0 20k 30.8 zte 1 15k 50.6 suning 3 13k 39.9 查詢 公司名 所在位置 從 公司名位置開始 查詢 第乙個 冒號 所在位置 從第乙個 冒號 所在位置開始 查詢 第二...

python 中的字串操作

s.strip lstrip rstrip strcpy sstr1,sstr2 sstr1 strcpy sstr2 sstr1 sstr1 strcpy2 print sstr2 strcat sstr1,sstr2 sstr1 strcat sstr2 sstr1 sstr2 print ss...