开发者社区> 问答> 正文

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

一码平川MACHEL 2019-01-21 14:56:51 369

字典和集合都在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设定的执行时间

Python
分享到
取消 提交回答
全部回答(3)
  • 腾虎
    2019-07-17 23:26:05

    可加入datetime库 具体跑一下各环节时间.
    另外你的集合用add...字典直接用[] 赋值..应该效率是不一样的..

    0 0
  • 客官来玩啊
    2019-07-17 23:26:05

    楼上说明了问题所在
    具体题主可以使用 cProfile 功能来进行类似问题分析
    image

    0 0
  • 一码平川MACHEL
    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
    
    0 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题