为什么dictionary比python中的set花费更少的时间?
字典和集合在Python中都实现为哈希表,插入时间和查找时间均为O(1)。我正在编写一个程序来计算字符串是否由所有唯一的字符组成,并且我正在使用一个集合来跟踪到目前为止看到的所有字符。我观察到的是,如果我使用字典而不是集合,程序的总体运行时间会快一点。谁能给我解释一下原因吗 使用字典进行编码:为什么dictionary比python中的set花费更少的时间?,python,python-3.x,dictionary,set,hashtable,Python,Python 3.x,Dictionary,Set,Hashtable,字典和集合在Python中都实现为哈希表,插入时间和查找时间均为O(1)。我正在编写一个程序来计算字符串是否由所有唯一的字符组成,并且我正在使用一个集合来跟踪到目前为止看到的所有字符。我观察到的是,如果我使用字典而不是集合,程序的总体运行时间会快一点。谁能给我解释一下原因吗 使用字典进行编码: def TestUniqueCharacters(characters): chars = {} for character in characters: if chara
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-=[];',.!@#$%^&*()")
字典执行时间
带集合的执行时间
我不想在这方面花费太多时间,因为dict和set的实现在不同的Python版本中有所不同。追查版本相关的小秘密并没有多大乐趣;-) 因此,我建议改变一下:
chars = set()
for character in characters:
if character not in chars:
chars.add(character)
致:
看看在您使用的Python版本下会发生什么
在原始
chars.add(…)
中,每次通过循环,必须在chars
对象上查找字符串名为“add”
的方法,并创建一个绑定方法对象,然后使用参数character
调用该对象。虽然这不是一项重大开支,但也不是免费的。在建议的重写中,add
方法只在循环外查找一次。我不想在这方面花费太多时间,因为dict和set的实现在不同的Python版本中有所不同。追查版本相关的小秘密并没有多大乐趣;-)
因此,我建议改变一下:
chars = set()
for character in characters:
if character not in chars:
chars.add(character)
致:
看看在您使用的Python版本下会发生什么
在原始
chars.add(…)
中,每次通过循环,必须在chars
对象上查找字符串名为“add”
的方法,并创建一个绑定方法对象,然后使用参数character
调用该对象。虽然这不是一项重大开支,但也不是免费的。在建议的重写中,add
方法只在循环外查找一次。在进行比较之前,您是否定义了误差范围?它是否大于结果的差异?在进行比较之前,您是否定义了误差幅度?这比结果的差异大吗?嗨,非常感谢你的建议。它确实大大缩短了执行时间。套路的平均执行时间从我之前的2分钟20秒下降到1分钟45秒。嗨,非常感谢你的建议。它确实大大缩短了执行时间。集合的平均执行时间现在从我之前得到的大约2分钟20秒下降到1分钟45秒。