【发布时间】:2014-07-21 04:26:59
【问题描述】:
我写了一段代码,其中列表大小随着每次迭代而增加,迭代次数可以达到近 100000 次。
样本:
def do_something():
Lst.append(k)
while N < 100000:
if k not in Lst:
do_something()
现在,我注意到这个方法需要很长时间才能完成。请注意,我确实设置了 setrecursionlimit() 。事实上,够尴尬的,程序一直运行了几个小时。
后来,在尝试寻找优化代码的方法时,我将 Lst 转换为 Dct。所以代码看起来像:
def do_something():
Dct[k] = True
while N < 100000:
if Dct[k] == False:
do_something()
代码运行得更快。在阅读了一些关于 SOF(Repeatedly appending to a large list (Python 2.6.6)) 的对话后,我意识到它不是慢的列表,而是如何处理更大的列表数据的内存。这个网站https://wiki.python.org/moin/TimeComplexity,阐明了列表和字典查找时间复杂度。列出它的 O(n),其中 Dct 查找是 O(1)。这就是 Dct 表现更好的原因吗?列表查找和字典查找执行的精确度如何?
【问题讨论】:
-
为此使用
set而不是dict会好得多。
标签: python list dictionary