【问题标题】:How I can print the numbers from 1-9999? [closed]如何打印 1-9999 的数字? [关闭]
【发布时间】:2012-11-09 10:12:21
【问题描述】:

我在这里试过了,但它不能像这样打印长数字

for i in range(1,222222222222222):
    print i

错误:

Traceback (most recent call last):
  File "x.py", line 1, in <module>
    for i in range(1,222222222222222):
MemoryError

【问题讨论】:

  • 9999 != 222222222222222。你知道吗?
  • @RohitJain 在激烈的战斗中,这个微小的差异可能会逃脱读者的注意。
  • @Tichodroma .. 哈哈。是的,没错。 ;)
  • onetovalue = range(1,10000) for count in onetovalue: print (count)
  • 请不要在您的问题标题中加上“已回答”或“已解决”。 Accept the answer 通过单击旁边的复选标记解决了您的问题。

标签: python


【解决方案1】:

使用xrange

for i in xrange(1, 222222222222222):
    print i

此函数与 range() 非常相似,但返回的是“xrange 对象”而不是列表。这是一个不透明的序列类型,它产生与相应列表相同的值,但实际上并没有同时存储它们。

【讨论】:

  • xrange(222222222222222) 将引发 Overflow 错误。
【解决方案2】:

使用 xrange 代替 range。 range 生成一个列表,将其存储在内存中并对每个项目执行循环。这在处理相当大的数字时会产生内存错误。

xrange 是生成器而不是列表,项目是动态创建的,因此不会损害内存

希望对你有帮助

【讨论】:

    【解决方案3】:

    您可能正在使用 Python2,其中range() 会生成一个数字列表。包含 222222222222222 元素的列表非常大,对于大多数 RAM 来说太大了。

    与此相反,xrange() 生成一个 xrange 对象,可以像列表一样访问(索引、迭代),但不会占用太多空间,因为值是按需计算的。

    在 Python3 中,range() 返回一个范围对象,与 2.x 中的 xrange 对象完全一样。

    【讨论】:

      【解决方案4】:

      改用 xrange。 range 函数实际上是在内存中构造列表,而 xrange 返回一个生成器(类似于迭代器),并且一次只返回一个数字。

      for i in xrange(1,222222222222222L):
          print i
      

      查看更多主题here

      【讨论】:

        【解决方案5】:

        Python 在开始循环之前创建范围,导致大量内存使用/oom 错误。

        最好使用 xrange,它将范围分配为更小的部分。

        for i in xrange(from, to):
            print i
        

        【讨论】:

          【解决方案6】:

          您也可以自己创建生成器using yield

          def my_gen(start, end, step):
              while start < end:
                  start += step
                  yield start
          
          for x in my_gen(1, 1000, 2):
              print x
          

          【讨论】:

            【解决方案7】:

            查看此 While 循环示例

            a = 0
            while a < 10 :
                a += 1
                print (a)
            

            你也可以使用“For循环”来做同样的事情

            onetoten = range(1,11)
            for count in onetoten:
                print (count)
            

            【讨论】:

            • 提问者抱怨range() 不适合他的目的,您建议改用range()?很有趣。
            • @glglgl xrange() 可能不适用于这么大的 int 222222222222222,它会在我的 32 位系统上引发 OverFlowError,请参阅 this,因此 while-loop 可能是更好的解决方案在这里。
            • @AshwiniChaudhary 是的,答案的前半部分可以,但后半部分不行。
            猜你喜欢
            • 1970-01-01
            • 2019-12-20
            • 1970-01-01
            • 2014-07-15
            • 2014-12-27
            • 1970-01-01
            • 2021-02-20
            • 2018-08-18
            • 2020-01-11
            相关资源
            最近更新 更多