[英]“ValueError: list.index(x): x not in list” in Python, but it exists
[英]Complexity of list.index(x) in Python
我指的是這個: http : //docs.python.org/tutorial/datastructures.html
就大 O 表示法而言, list.index(x)
函數的運行時間是list.index(x)
?
它是 O(n),也請查看: http : //wiki.python.org/moin/TimeComplexity
本頁記錄了當前 CPython 中各種操作的時間復雜度(又名“Big O”或“Big Oh”)。 其他 Python 實現(或較舊或仍在開發中的 CPython 版本)可能具有略有不同的性能特征。 但是,通常可以安全地假設它們的速度不會超過 O(log n) 的倍數……
對於線性搜索(例如,list.index),任何列表實現都將具有 O(n) 復雜度。 雖然可能有一些古怪的實現更糟糕......
您可以通過使用不同的數據結構(例如有序列表或集合)來提高查找復雜性。 這些通常用二叉樹實現。 但是,這些數據結構對其包含的元素施加了限制。 在二叉樹的情況下,元素需要是可排序的,但查找成本下降到 O(log n)。
如前所述,請在此處查看標准 Python 數據結構的運行時間成本: http : //wiki.python.org/moin/TimeComplexity
使用以下代碼檢查時序。 它的復雜度是 O(n)。
import time
class TimeChecker:
def __init__(self, name):
self.name = name
def __enter__(self):
self.start = self.get_time_in_sec()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
now = self.get_time_in_sec()
time_taken = now - self.start # in seconds
print("Time Taken by " + self.name + ": " + str(time_taken))
def get_time_in_sec(self):
return int(round(time.time() * 1000))
def test_list_index_func(range_num):
lis = [1,2,3,4,5]
with TimeChecker('Process 1') as tim:
for i in range(range_num):
lis.index(4)
test_list_index_func(1000)
test_list_index_func(10000)
test_list_index_func(100000)
test_list_index_func(1000000)
print("Time: O(n)")
上面提供的文檔沒有涵蓋 list.index()
根據我的理解,list.index 是 O(1) 操作。 如果你想了解更多,這里有一個鏈接。 https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
試試這個代碼,它會幫助你得到 lis.index 操作符占用的執行時間。
import timeit
lis=[11,22,33,44,55,66,77]
for i in lis:
t = timeit.Timer("lis.index(11)", "from main import lis")
TimeTaken= t.timeit(number=100000)
print (TimeTaken)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.