【问题标题】:Looping through huge ranges in python循环遍历python中的巨大范围
【发布时间】:2013-04-06 02:48:13
【问题描述】:

如何通过在Python巨大范围I(有效)循环?每当我尝试运行类似 - P>

for x in range(105, 10000000000000):
    #do stuff

它需要一个永恒来完成。我试着像itersetxrange但仍然没有成功很多事情。是否有任何外部模块,它可以帮助我做到这一点?

【问题讨论】:

  • 您可能不得不py3x在这里使用,因为这两个xrange()range()不会对10000000000000工作。 SPAN>
  • 好了,你确实是遍历一个巨大的范围,表现更加微乎其微的工作每次迭代将需要一段时间。什么是你需要在循环里做着迭代很多次? SPAN>
  • 是此有关的谷歌codeJam B>不知何故?跨度>
  • 谷歌codejam将允许你下载任何代码明日(系统检查后)。你可以使用我的把手加我有: xonixMonty B> SPAN>

标签: python algorithm python-2.7 large-data


【解决方案1】:

鉴于范围,我认为可以肯定地说,几乎无论您做什么或如何做,都需要一段时间。

更具体地说,您正在执行大约 1E+13 次循环迭代。使用不错的代码和合理的快速处理器,您可能每秒可以执行大约 4E+9 条指令(例如,在 2 GHz 时每个时钟周期执行 2 条指令)。这显然不准确,但现在让我们继续下去,看看我们会在哪里结束。

因此,即使我们假设循环的每次迭代只需要执行一条单周期指令,它也将花费大约:1E+13/4E+9 = 2.5E3 秒 = ~42 分钟。鉴于您在循环内做一些工作,并且循环本身有一些开销,我们显然将在每次迭代中执行不止一条机器代码指令。如果我们每次迭代必须执行 1000 条指令(可能是一个合理的初步近似值,因为你没有告诉我们你在做什么),那么我们正在寻找大约 600-700 小时要执行的循环。

底线:更改您表示范围的方式可能会有所帮助,但如果您需要在如此大的范围内进行迭代,则无法避免需要一段时间的事实。

【讨论】:

    【解决方案2】:

    假设您有一个 3GHz 处理器,并且您只需要一个周期来处理该范围内的每个条目,您将需要 ~3,333 秒(~1 小时)来处理它。

    这让我觉得你所做的事情根本上是错误的。也许你应该重新构建你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      相关资源
      最近更新 更多