Python高階(八) in的詳解

2021-08-11 07:51:05 字數 2472 閱讀 9730

「in」的存在使得python在操作可迭代物件時簡單得多,這便是「in」存在的乙個最大的好處

1.用於判斷(查詢)元素是否在可迭代物件中(不包括生成器;但包括set集合,set不能迭代,但是也能用「in」來查詢元素):

*** in *** :判斷***是否在***中, 如果在,返回真,不在,返回假。

*** not in *** :判斷***是否不在***中, 如果不在,返回真,在,返回假。

可配合「if」和「while」使用:

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)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

給定表m,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址,則稱表m為雜湊(hash)表,函式f(key)為雜湊(hash) 函式。

關於雜湊表的原理我就不在這裡細講,總之就是一種演算法來使表中的每個元素附上乙個鍵(key),然後查詢元素只要匹配這個鍵來就可以了。速度上會快很多。如果有興趣可以點這篇鏈結了解:雜湊表(雜湊表)原理詳解下面我舉個例子感受下:

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,settuple, 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,可以跳過這一章,直接閱讀下一章。有時候網路程式需要與自身通訊。比如說,通過某些協議對使用者連線進行隧道操作的程式,有時候也需要通過同樣的協議對自身的連線進行隧道操作。當然,可以通過開啟乙個到自...