正如您在TimeComplexity上的 python wiki 中看到的那样,在获取 O(1) 项目的平均情况下,它们都具有相同的复杂性list
。dict
因此,简单的基于索引的查找应该没有太大的区别。
编辑:我刚刚编写了一些基准代码,它获取第一个元素,一个来自中心,一个来自最后一个。您会看到一个列表有一个小的进步(尽管考虑到代码运行 1000000 次,0.01s 的偏差并没有那么大)。
总之,如果我处于您的情况,我会使用一个列表,因为它也更适合基于索引的请求的问题。
>>> from timeit import Timer
>>> t=Timer("(l[0], l[3], l[7])","l=[50, 30, 30, 30, 20, 30, 50, 40]")
>>> sorted(t.repeat(5))
[0.17861513267149576, 0.17863279532627985, 0.17883092423682, 0.17892576501373014, 0.18901037296996037]
>>> t=Timer("(l[0], l[3], l[7])","l={0: 50, 1: 30, 2: 30, 3: 30, 4: 20, 5: 30, 6: 50, 7: 40}")
>>> sorted(t.repeat(5))
[0.18541179903735383, 0.1855488765975224, 0.1855757545505412, 0.18578041096390052, 0.21753940019925722]