python查詢演算法第三彈 分塊查詢

2021-10-12 04:46:10 字數 1222 閱讀 9894

將列表分成若干子列表(塊),這些塊是有序的,(每個塊的第乙個元素比前乙個塊的最後乙個元素大),但塊中的元素是無序的。首先確定待查值在哪個塊,然後在塊中順序查詢即可。

# -*- coding: utf-8 -*-

'''分塊查詢:塊是有序的(塊的第乙個元素比前乙個塊的最後乙個元素大),但元素可以是無序的;

1.首先看待查元素屬於哪個塊

2.找到屬於哪個塊之後 跳進去順序查詢

'''def

divblock

(ilist,indexlist)

: res=

for key in indexlist:

sublist=

[ele for ele in ilist if ele<=key[1]

and ele>=key[0]

]return res

defblocksearch

(input_list,index_list,key)

:for sublist,index in

zip(input_list,index_list)

:# 迴圈對應的塊和ind

if key<=index[1]

:# 若待查值《邊界值

res=

[i for i in

range

(len

(sublist)

)if key==sublist[i]

]# 順序查詢子list。

return res[0]

return-1

if __name__ ==

'__main__'

: ilist=[9

,17,13

,5,2

,26,7

,23,29

] key=

13# 分塊,可以分成三塊,給定三個有序下標:0-9,10-19,20-29

indexlist=[[

0,9]

,[10,

19],[

20,29]

]# 類似於哨兵的角色

res=divblock(ilist,indexlist)

# 分塊好的list

result=blocksearch(res,indexlist,key)

print

(result)

a. 主要是靈活運用zip函式。

Python基礎學習 第三彈

向內看自己,永遠看自己的進步!好!開始!五 函式 def定義函式,函式分為有無引數 有無返回值。函式先後順序執行,先定義函式在呼叫函式。函式的本質是乙個位址,函式的引數可以為另乙個函式,函式作為變數時不帶括號。還可以利用返回值作為引數。帶括號的函式的型別是函式的返回值型別。函式可以有多個返回值。re...

python資料型別(第三彈)

本文著重介紹python語言的兩種資料型別 列表和元組 列表相比於整型 浮點型等資料型別,列表是乙個復合資料型別,它更像乙個容器,可以容納多種不同型別的資料。如上圖 列表a中裝進去了字串 sdf 整數3,浮點數7.9,列表 1,2,3 即列表可以成為另乙個列表的元素 當乙個列表建立完成之後,可以對其...

查詢演算法 分塊查詢

分塊查詢也稱為索引順序表查詢。分塊查詢就是將順序表 主表 分成若干個子表,然後為每個子表建立乙個索引表,利用索引在其中乙個子表中查詢。兩部分 索引表 儲存順序表的每個子表的開始索引和最大值。順序表 主表所有資料存放的位置。子表內可以是無序的,但是子表之前面的子表中每個元素必須小於後面子表中的每個元素...