Python Bisect模塊示例
當需要在有序列表中高效插入元素並保持順序時應使用bisect 模塊,1. bisect.bisect_left(list, value) 返回應插入位置,相同值插左邊;2. bisect.bisect_right(list, value) 或bisect.bisect() 返回插入位置,相同值插右邊;3. bisect.insort_left(list, value) 將value 插入左邊位置;4. bisect.insort_right(list, value) 或bisect.insort() 插入右邊位置;示例中使用bisect.insort(scores, 77) 將成績77 插入有序列表並保持順序,插入重複值75 時默認插在已有75 後面,若用insort_left 則插在前面;通過bisect.bisect_left(scores, 75) 可僅獲取插入位置而不實際插入,可用於實現二分查找,如定義binary_search 函數查找某值是否存在;使用bisect 時列表必須預先排序,查找位置時間複雜度為O(log n),但插入因元素移動為O(n),頻繁插入場景可考慮heapq 或sortedcontainers 更高效,該模塊在處理有序數據插入與查找時非常實用,尤其適用於排行榜、時間序列數據等場景。
Python 的bisect
模塊提供了一種在有序列表中插入元素並保持列表有序的高效方法。它使用二分查找算法,因此比每次插入後排序更高效。下面是一個實用的示例,幫助你理解如何使用bisect
。

? 什麼時候用bisect?
當你維護一個有序列表,並且需要頻繁插入新值但仍保持順序時, bisect
非常有用,比如:
- 維護排行榜
- 插入時間序列數據
- 實現二分查找邏輯
? 常用函數說明
bisect
模塊主要有兩個核心函數:

bisect.bisect_left(list, value)
返回value
應該插入的位置,如果有相同值,插在左邊。-
bisect.bisect_right(list, value)
或bisect.bisect()
返回插入位置,相同值插在右邊。 bisect.insort_left(list, value)
直接將value
插入到左邊位置,保持有序。bisect.insort_right(list, value)
或bisect.insort()
插入到右邊位置。
? 實際例子:維護一個有序成績列表
import bisect # 初始有序的成績列表scores = [65, 70, 75, 80, 85] # 插入新成績,保持有序bisect.insort(scores, 77) print(scores) # [65, 70, 75, 77, 80, 85] bisect.insort(scores, 75) print(scores) # [65, 70, 75, 75, 77, 80, 85] —— 75 插在已有75 後面(insort 默認是right) # 如果想插在左邊bisect.insort_left(scores, 75) print(scores) # [65, 70, 75, 75, 75, 77, 80, 85]
? 查找插入位置而不實際插入
有時候你只想知道該插在哪,不立即插入:
pos = bisect.bisect_left(scores, 75) print(f"75 應該插入在位置{pos}") # 輸出2 或3,取決於已有幾個75
這個可以用來實現二分查找,比如查找某個值是否存在:
def binary_search(arr, x): i = bisect.bisect_left(arr, x) if i != len(arr) and arr[i] == x: return i # 找到了,返回索引return -1 # 未找到print(binary_search(scores, 77)) # 輸出索引,比如5 print(binary_search(scores, 99)) # -1,沒找到
? 小貼士
- 列表必須預先排序,否則
bisect
行為不可預測。 -
insort
系列函數插入時時間複雜度是O(n),因為列表移動元素;但查找位置是O(log n)。 - 對於頻繁插入的場景,考慮是否用
heapq
或sortedcontainers
(第三方)更高效。
基本上就這些。 bisect
不復雜,但在處理有序數據時非常實用,尤其配合二分查找或插入場景。
以上是Python Bisect模塊示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

處理API認證的關鍵在於理解並正確使用認證方式。 1.APIKey是最簡單的認證方式,通常放在請求頭或URL參數中;2.BasicAuth使用用戶名和密碼進行Base64編碼傳輸,適合內部系統;3.OAuth2需先通過client_id和client_secret獲取Token,再在請求頭中帶上BearerToken;4.為應對Token過期,可封裝Token管理類自動刷新Token;總之,根據文檔選擇合適方式,並安全存儲密鑰信息是關鍵。

要測試API需使用Python的Requests庫,步驟為安裝庫、發送請求、驗證響應、設置超時與重試。首先通過pipinstallrequests安裝庫;接著用requests.get()或requests.post()等方法發送GET或POST請求;然後檢查response.status_code和response.json()確保返回結果符合預期;最後可添加timeout參數設置超時時間,並結合retrying庫實現自動重試以增強穩定性。

在Python中,函數內部定義的變量是局部變量,僅在函數內有效;外部定義的是全局變量,可在任何地方讀取。 1.局部變量隨函數執行結束被銷毀;2.函數可訪問全局變量但不能直接修改,需用global關鍵字;3.嵌套函數中若要修改外層函數變量,需使用nonlocal關鍵字;4.同名變量在不同作用域互不影響;5.修改全局變量時必須聲明global,否則會引發UnboundLocalError錯誤。理解這些規則有助於避免bug並寫出更可靠的函數。

要使用Python創建現代高效的API,推薦使用FastAPI;其基於標準Python類型提示,可自動生成文檔,性能優越。安裝FastAPI和ASGI服務器uvicorn後,即可編寫接口代碼。通過定義路由、編寫處理函數並返回數據,可以快速構建API。 FastAPI支持多種HTTP方法,並提供自動生成的SwaggerUI和ReDoc文檔系統。 URL參數可通過路徑定義捕獲,查詢參數則通過函數參數設置默認值實現。合理使用Pydantic模型有助於提升開發效率和準確性。

如何在Python中高效處理大型JSON文件? 1.使用ijson庫流式處理,通過逐項解析避免內存溢出;2.若為JSONLines格式,可逐行讀取並用json.loads()處理;3.或先將大文件拆分為小塊再分別處理。這些方法有效解決內存限制問題,適用於不同場景。

在Python中,用for循環遍曆元組的方法包括直接迭代元素、同時獲取索引和元素、以及處理嵌套元組。 1.直接使用for循環可依次訪問每個元素,無需管理索引;2.使用enumerate()可同時獲取索引和值,默認索引起始為0,也可指定start參數;3.對嵌套元組可在循環中解包,但需確保子元組結構一致,否則會引發解包錯誤;此外,元組不可變,循環中不能修改內容,可用\_忽略不需要的值,且建議遍歷前檢查元組是否為空以避免錯誤。

Yes,aPythonclasscanhavemultipleconstructorsthroughalternativetechniques.1.Usedefaultargumentsinthe__init__methodtoallowflexibleinitializationwithvaryingnumbersofparameters.2.Defineclassmethodsasalternativeconstructorsforclearerandscalableobjectcreati

使用Python調用WebAPI獲取數據的關鍵在於掌握基本流程和常用工具。 1.使用requests發起HTTP請求是最直接的方式,通過get方法獲取響應並用json()解析數據;2.對於需要認證的API,可通過headers添加token或key;3.需檢查響應狀態碼,推薦使用response.raise_for_status()自動處理異常;4.面對分頁接口,可通過循環依次請求不同頁面並加入延時避免頻率限制;5.處理返回的JSON數據時需根據結構提取信息,複雜數據可用pandas轉換為Data
