开发者社区> 问答> 正文

为什么字典比python中设置的时间少?

字典和集合都在Python中实现为哈希表,插入时间和查找时间为O(1)。我正在编写一个程序来计算字符串是否包含所有唯一字符,并且我使用一个集来跟踪到目前为止看到的所有字符。我观察到的是,如果我使用字典而不是集合,程序的整体运行时间会快一些。有人可以解释一下这个原因吗?

代码使用字典:

def TestUniqueCharacters(characters):

chars = {}
for character in characters:
    if character not in chars:
        chars[character] = 1
    else:
        return False
return True

for i in range(30000000):

TestUniqueCharacters("qwertyuiopasdfghjklzxcvbnm1234567890-=[];',.!@#$%^&*()")

代码使用集合

def TestUniqueCharacters(characters):

chars = set()
for character in characters:
    if character not in chars:
        chars.add(character)
    else:
        return False
return True

for i in range(30000000):

TestUniqueCharacters("qwertyuiopasdfghjklzxcvbnm1234567890-=[];',.!@#$%^&*()")

用字典执行时间

D2RiT
设定的执行时间

V5zMB设定的执行时间

展开
收起
一码平川MACHEL 2019-01-21 14:56:51 2174 0
3 条回答
写回答
取消 提交回答
  • 可加入datetime库 具体跑一下各环节时间.
    另外你的集合用add...字典直接用[] 赋值..应该效率是不一样的..

    2019-07-17 23:26:05
    赞同 展开评论 打赏
  • 楼上说明了问题所在
    具体题主可以使用 cProfile 功能来进行类似问题分析
    image

    2019-07-17 23:26:05
    赞同 展开评论 打赏
  • 建议改变:

    chars = set()
    for character in characters:

    if character not in chars:
        chars.add(character)

    至:

    chars = set()
    charsadd = chars.add # new line here
    for character in characters:

    if character not in chars:
        charsadd(character)  # this line is different - no method lookup now
    
    2019-07-17 23:26:05
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载