Search搜尋方法 Python成為專業人士筆記

2021-10-07 20:40:15 字數 2815 閱讀 5201

list:

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

5 in alist # true

10 in alist # false

tuple:

atuple = ('0', '1', '2', '3', '4')

4 in atuple # false

'4' in atuple # true

string:

astring = 'i am a string'

'a' in astring # true

'am' in astring # true

'i' in astring # false

set:

aset = 

(10, 10) in aset # true

10 in aset # false

dict:

dict有點特殊: in關鍵字引數只檢查鍵。如果你想搜尋值,你需要指定.values。如果希望搜尋鍵,也可以使用相同的方法:

adict = 

1 in adict # true - 預設搜尋的是key

'a' in adict # false

2 in adict.keys()# true - 顯式指定搜尋key

'a' in adict.values() # true - 顯式指定搜尋值

(0, 'a') in adict.items() # true - 顯式搜尋key/value鍵值對

為了允許在自定義類中使用in,該類必須提供包含的內建方法__contains__,如果不能提供,則必須提供乙個__iter__方法

假設您有乙個包含列表的列表類:

class listlist:

def __init__(self, value):

self.value = value

# 建立一組用於快速訪問的值

self.setofvalues = set(item for sublist in self.value for item in sublist)

def __iter__(self):

print('using __iter__.')

# 遍歷子列表的迭代器

return (item for sublist in self.value for item in sublist)

def __contains__(self, value):

print('using __contains__.')

# 僅搜尋值是否在其中

return value in self.setofvalues

#使用in進行測試

a = listlist([[1,1,1],[0,1,1],[1,5,1]])

print(10 in a) # false

# prints: using __contains__.

print(5 in a) # true

# prints: using __contains__.

首先來看尋找索引的**:

astring = 'hello on stackoverflow'

astring.index('o')# 4

astring.rindex('o') # 20 注意:是從右邊開始搜尋匹配

astring.find('o')# 4

astring.rfind('o')# 20 注意:是從右邊開始搜尋匹配

可以看到s.index()與s.find()類似,不過索引字串中的子串沒找到會報錯。

而s.find()在找不到substring時,不會報錯,而會返回-1

ist和tuple有乙個索引方法來獲取元素的位置 :

alist = [10, 16, 26, 5, 2, 19, 105, 26]

#返回元素為16的索引值

print(alist.index(16)) # 注意,這裡是通過元素查詢索引

print(alist.index(15)) # 注意,找不到會報錯,所以這裡要做好異常處理

tuple的用法完全一樣

其實python 的列表(list)內部實現是乙個陣列,也就是乙個線性表。在列表中查詢元素可以使用list.index()方法,其時間複雜度為o(n) 。對於大資料量,則可以用二分查詢進行優化。

二分查詢要求物件必須有序,其基本原理如下:

1.從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;

2.如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。

3.如果在某一步驟陣列為空,則代表找不到。

二分查詢也成為折半查詢,演算法每一次比較都使搜尋範圍縮小一半, 其時間複雜度為 o(logn),示例**如下:

import bisect

alist = [i for i in range(1, 100000, 3)] # 生成乙個從1開始,步長為3,最大值為100000的有序列表

print(bisect.bisect_left(alist, 4)) # 1

print(index_sorted(alist, 97285)) # 32428

搜尋演算法 Search

1.概述 搜尋演算法是利用計算機的效能優勢來有目的的列舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。在問題求解過程中,人們所面臨的大多數現實問題往往沒有確定性的演算法,需要通過搜尋演算法來解決。搜尋問題一般只需要考慮兩個基本問題 1 使用合適的狀態空間來表示問題。2 測試該狀態...

EditText支援Search按鍵搜尋

想要edittext實現軟鍵盤的搜尋按鍵搜尋可以對edittext的屬性集新增如下屬性 android imeoptions actionsearch android singleline true 設定android imeoptions actionsearch 讓軟鍵盤的回車鍵變回搜尋鍵,設定...

正則的matche方法和search方法

1.matche方法match string pos endpos string 匹配使用的文字,pos 文字中正規表示式開始搜尋的索引。及開始搜尋 string 的下標 endpos 文字中正規表示式結束搜尋的索引。如果不指定pos,預設是從開頭開始匹配,如果匹配不到,直接返回 none impo...