查询set、dict、dict.keys()的速度对比
查找效率:set>dict>list 单次查询中: list set dict O(n) set做了去重, 本质应该一颗红黑树 (猜测,STL就是红黑树), 复杂度 O(logn); dict类似对key进行了hash,然后再对hash生成一个红黑树进行查找, 其查找复杂其实是O(logn),并不是所谓的O(1)。 O(1)只是理想的实现, 实际上很多hash的实现是进行了离散化的。 dict比set多了一步hash的 过程,so 它比set慢,不过差别不大。 那么为什么dict.keys()查询速度比另外dict,set慢很多呢?这就要对比list、dict、set三种的数据结构了。 [1]dict.keys()实际上是list(keys),是dict的所有key组成的list。查找一个元素是否在list中是以list的下标为索引遍历list. [2]而查询是否在dict中,是将key以hash值的形式直接找到key对应的索引,根据索引可直接访问value。对量大的dict查询,自然是后者快很多。 [3]而set和dict的存储原理基本是一样的,唯一不同的是,set没有value,只有key。对查询key是否在dict或sset内,效果基本上是一样的。 由此,可以得出,如果存储的数据会被反复查询,且量大,那么, 尽量不要用list,尽量用dict,如果元素不重复,用set更好。