【问题标题】:Which is more expensive in terms of memory and speed Lists or dictionaries in Python在内存和速度方面哪个更昂贵 Python 中的列表或字典
【发布时间】:2016-11-25 14:04:07
【问题描述】:

我正在我的电脑上测试记忆代码。我有范围为 100000 的数组。使用以下代码。

def fact1(n):
   if n<1:
      return 1
   else:
      fa=1
      for i in range(1, n+1):
          fa*=i
      return fa

使用记忆技术,以下代码将是,

  memolookuptable={1:1, 2:2}
  def fact2(n):
      if n not in memoookuptable.keys():
          for i in range(3,n+1):
              if i not in memoookuptable.keys():
                   memolookuptable[i]=i*memolookuptable[i-1]

根据我对代码的理解,内存优化后的记忆开始以低速运行。我是否将记忆正确理解为通过存储计算值来避免重新计算?如果这是正确的,为什么尽管计算值很容易获得,但较大的计算速度会变慢?

使用记忆优化内存和速度的最佳方法是什么?

【问题讨论】:

  • 简短回答:列表使用的 RAM 比 dicts 少,在需要扩展时速度更快,如果您知道索引,则列表查找比 dict 查找更快。但是,如果您需要在列表中搜索某个项目,那么如果您知道它的键,那么这比直接访问一个 dict 项目要慢得多。如果您不打算使用列表中的所有插槽,则 dict 可以使用 less RAM。
  • 对不起,我写了 memo.keys()。我在写代码后意识到了这一点。谢谢!我的错。

标签: python memoization


【解决方案1】:

您无需致电.keys() - 您只需使用if n not in memolookuptable:。我相信应该更快,因为它使用散列。 .keys() 返回一个列表,查找速度较慢。

【讨论】:

  • .keys() 在 Python 2 中返回一个列表,但在 Python 3 中它返回一个动态的Dictionary view object,但在每次循环迭代时创建一个新列表仍然非常低效。
  • 有趣。我会尽量记住查找 2 vs 3,或者在我的回答中注意它是针对 Python 2 的。
猜你喜欢
  • 2020-07-25
  • 1970-01-01
  • 2010-10-12
  • 2012-12-16
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2014-03-24
相关资源
最近更新 更多