哪个在python中更快,按键查找字典或按索引查找列表?

时间:2017-05-15 04:03:58

标签: python performance list dictionary

由于python列表没有实现为数组,如果对于某些大N,我们有:

dic = { 0: 'val0', ................................, N: 'valN' }
lst = ['val0', ......................................., 'valN' ]

对于0< = X< = N,哪个更快?

A) res = dic[X]
B) res = lst[X]

由于

1 个答案:

答案 0 :(得分:2)

您可以像这样运行timeit测试:

d={0: 'val0', 1: 'val1', 2: 'val2', 3: 'val3', 4: 'val4', 5: 'val5', 6: 'val6', 7: 'val7', 8: 'val8', 9: 'val9', 10: 'val10'}
l=['val0', 'val1', 'val2', 'val3', 'val4', 'val5', 'val6', 'val7', 'val8', 'val9', 'val10']

import timeit

print(timeit.timeit("""for i in range(11):
    d[i]""", globals=globals()))

print(timeit.timeit("""for i in range(11):
    l[i]""", globals=globals()))

结果如下:

1.003921410003386
0.9669559969988768

列表索引略快一些。

Try it online!

结果将与N的增加保持平行,这里是1000 N:

d={i:"val%i"%i for i in range(1000)}
l=['val%i'%i for i in range(1000)]

import timeit

print(timeit.timeit("""for i in range(1000):
    d[i]""", number = 10000, globals=globals()))

print(timeit.timeit("""for i in range(1000):
    l[i]""", number = 10000, globals=globals()))

结果为:

0.7665060800063657
0.5568666460021632

列表索引仍然更快。

Try it online!