2017-10-16 122 views
0

Python 3中的列表的排序列表中的二分搜索的方式嗎?
假設我有一個列表的列表:Python - 列表的排序列表中的二進制搜索

list = [['A', 'B', 3], ['C', 'D', 1], ['E', 'F', 2]] 

我的3D元素的內部列表與排序是:

list = sorted(list , key=itemgetter(2)) 

,現在名單

[['C', 'D', 1], ['E', 'F', 2], ['A', 'B', 3]] 

而且現在如何使用二進制搜索(O(log(n))時間複雜度)在這個排序列表中使用來自排序完成的內部列表中的元素來搜索? 像

findBy(list, index_of_inner_list, value_of_inner_list_to_find) 

外列表是巨大的。內部列表有len 50.我需要做許多查詢,以便根據與內部列表相關的條件從外部列表中提取一些元素。我正在考慮bisect,但內心陣列會成爲我認爲的問題。

+1

你讀過這個:https://stackoverflow.com/questions/42146482/using-bisect-on-list-of-tuples-but-compare-using-first-value-only哪裏有幾點建議用於任意鍵功能的等分實現。 – schwobaseggl

+0

查看[bisect](https://docs.python.org/3.6/library/bisect.html#other-examples)文檔頁面上的最後一個示例。這看起來像你要去的嗎? – glibdud

+0

@glibdud該示例從破壞OP明確要求的「O(log_N)」對分性能的關鍵字構造一個新列表。 – schwobaseggl

回答

0

我認爲對分算法就夠了。

Python文檔告訴我們,

https://docs.python.org/3/library/bisect.html

該模塊提供用於維持有序 列表,而不必每次進行排序插入後的列表支持。對於具有昂貴的比較操作的項目的長列表 ,這可以是比較常見方法的改進 。該模塊被稱爲二等分 ,因爲它使用基本的二分算法來完成其工作。源碼 作爲該算法的工作示例可能是最有用的( 邊界條件已經正確!)。

+0

你能證明這與問題有關嗎?具體而言,通過除默認排序方法以外的某種方法排序元素? – glibdud