我指的是:http://docs.python.org/tutorial/datastructures.html
{O}符号表示list.index(x)
函数的运行时间是多少?
答案 0 :(得分:32)
这是O(n),也请查看:http://wiki.python.org/moin/TimeComplexity
此页面记录了当前CPython中各种操作的时间复杂度(又名“Big O”或“Big Oh”)。其他Python实现(或CPython的旧版本或仍在开发版本)可能具有略微不同的性能特征。但是,通常可以安全地假设它们的速度不超过O(log n)...
答案 1 :(得分:8)
根据上述文件:
list.index(x)
返回值为x的第一个项目列表中的索引。 如果没有这样的项目,则会出错。
这意味着搜索。您实际上正在x in s
,但不是返回True
或False
,而是返回x
的索引。因此,我会选择O {n}的listed time complexity。
答案 2 :(得分:1)
任何列表实现对于线性搜索(例如,list.index)将具有O(n)复杂度。虽然可能有一些古怪的实现,但更糟糕的是......
您可以使用不同的数据结构(例如有序列表或集合)来提高查找复杂性。这些通常用二叉树实现。但是,这些数据结构对它们包含的元素施加了约束。对于二叉树,元素需要可订购,但查找成本会降低到O(log n)。
如前所述,请查看标准Python数据结构的运行时成本: http://wiki.python.org/moin/TimeComplexity
答案 3 :(得分:0)
使用以下代码检查时间。它的复杂度为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)")
答案 4 :(得分:-1)
上面提供的文档没有涵盖list.index()
据我了解,list.index是O(1)运算。 如果您想了解更多,这里是一个链接。 https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
答案 5 :(得分:-3)
尝试使用此代码,它将帮助您获得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)