我有以下脚本需要测试哪个更快:
1.从列表中按索引获取元素,或者 2.从字典中按键获取元素。
它正在输出以下内容。
1.从列表中按索引获取元素,或者 2.从字典中按键获取元素。
import timeit
import random
lis1 = [random.randint(1,10000) for x in xrange(0,10001)]
dict1 = {x:random.randint(1,10000) for x in xrange(0,10001)}
def list_lookup():
index = random.randint(0,10000)
x = lis1[index]
def dict_lookup():
index = random.randint(0,10000)
x = dict1[index]
def main():
print timeit.repeat("list_lookup()", "from __main__ import list_lookup",number=1000000)
print timeit.repeat("dict_lookup()", "from __main__ import dict_lookup",number=1000000)
if __name__ == '__main__':
main()
它正在输出以下内容。
[1.208083152770996, 1.1942389011383057, 1.1882140636444092]
[1.2461788654327393, 1.2427518367767334, 1.2414629459381104]
虽然差别似乎微不足道,但似乎字典查找需要稍微更长的时间。
这是因为在字典中获取元素涉及两个步骤——首先对键进行哈希,然后获取值(第二步),而在列表中,我们只是从列表的特定位置的内存地址获取值。