「in」的存在使得python在操作可迭代物件時簡單得多,這便是「in」存在的乙個最大的好處
1.用於判斷(查詢)元素是否在可迭代物件中(不包括生成器;但包括set集合,set不能迭代,但是也能用「in」來查詢元素):
*** in *** :判斷***是否在***中, 如果在,返回真,不在,返回假。可配合「if」和「while」使用:*** not in *** :判斷***是否不在***中, 如果不在,返回真,在,返回假。
if x in
xif x notinx
while x in
xwhile x not
inx
2.用於逐個取可迭代物件的元素, 一般要配合for使用:
我們可能常用到的可迭代的物件包括:string, list, dict, tuple, generator, range函式
例子:
list_1 = [n for n in range(10)]
for i in list:
print(i)
3.在前面1的條件下,「in」的效率在不同的物件中查詢元素效率是很不一樣的。
tuple, list, dict, set用「in」來查詢元素時效率是相差很大的。
主要是因為dict, set背後原理是乙個雜湊表。而tuple, list只是乙個單純類似與陣列的結構
那什麼是雜湊表?
雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。關於雜湊表的原理我就不在這裡細講,總之就是一種演算法來使表中的每個元素附上乙個鍵(key),然後查詢元素只要匹配這個鍵來就可以了。速度上會快很多。如果有興趣可以點這篇鏈結了解:雜湊表(雜湊表)原理詳解下面我舉個例子感受下:給定表m,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址,則稱表m為雜湊(hash)表,函式f(key)為雜湊(hash) 函式。
import time
import random
len = 10 ** 7
# 生成各不相同的10^7個元素
in_set =
while len(in_set) < len:
in_set.add(random.random())
# 轉換為list,tuple,dict
in_list = list(in_set)
in_tuple = list(in_set)
in_dict =
#隨機選擇其中500個用於查詢
needles = [in_list[random.randint(0, len)]
for _ in range(500)]
def test(target):
t1 = time.time()
global needles
found = 0
for n in needles:
if n in target:
found +=1
t2 = time.time()
print(found)
return t2 - t1
t1 = test(in_set)
t2 = test(in_list)
t3 = test(in_tuple)
t4 = test(in_dict)
print(t1, t2, t3, t4)
結果:set:0.0009999275207519531, list:451.28881216049194,tuple:464.02254033088684, dict:0.0010001659393310547
dict,set比tuple, list快了不止一點。所以說在資料量比較大的且需要查詢元素的時候請使用dict, set,這樣帶來的速度提公升不是一點點那麼簡單了
python函式的高階應用詳解
函式是我們所熟知的,在python中函式的定義格式如下 def 函式名 形式引數 函式體 函式的封裝就是實現 塊的復用,python內建了一些基礎的函式,開發者也可以自己定義函式,函式只能先定義,再進行呼叫。1 程式遇到函式呼叫的情況時,暫停執行 2 將實際引數值傳遞給函式引數 3 執行函式體語句 ...
python自學(八) 高階函式 filter
後記 字串反轉 一 filter 接著昨天的學習filter 這個函式算是比較熟悉的了,和js的功能效果基本一致 對於傳入的列表的每乙個元素執行目標函式,返回函式中返回值為true的元素,組成乙個新的列表 def f item filter f,list 作業一 生成質數集合 usr bin env...
八 高階話題
本章描述bufferevent的一些對通常使用不必要的高階特徵。如果只想學習如何使用bufferevent,可以跳過這一章,直接閱讀下一章。有時候網路程式需要與自身通訊。比如說,通過某些協議對使用者連線進行隧道操作的程式,有時候也需要通過同樣的協議對自身的連線進行隧道操作。當然,可以通過開啟乙個到自...