python - 如何在没有列表的情况下计算非常大的数字

标签 python

我正在尝试完成一个编码挑战,该挑战要求我计算 1 到 X 之间的所有数字,其中最多可以达到 400,000,000,000,000,000

我的方法是遍历一个列表,最后将位数添加到我的结果中,如下所示:

def page_digits(pages):
    list_of_pages = list(range(1, pages + 1))
    res = 0
    for num in list_of_pages:
        res += len((str(num)))
    return res

但显然创建一个介于 1 和那个大数字之间的每个数字的列表需要大量存储空间,并且运行它会返回“MemoryError Line 2”

我还能怎么做呢?或避免问题

最佳答案

没有理由需要将范围转换为列表。

>>> def page_digits(pages):
...     res = 0
...     for num in range(1, pages + 1):
...         res += len(str(num))
...     return res
...
>>> page_digits(100000)
488895

调用 list 构造函数会强制范围中的每个元素单独存储在内存中,但是常规的 range 对象非常节省内存(它只包含 args你在构造时传递了它)同时仍然是可迭代的。

您可能需要将范围转换为列表的唯一原因是改变其中的各个元素(您不能对范围进行此操作)。

关于python - 如何在没有列表的情况下计算非常大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69256649/

相关文章:

python - 将查询集数据传递给另一个查询 django

python - 神经网络似乎在每次执行时都停留在单个输出上

python - 在 macOS 上的 VS Code 中启动 Python 脚本时出现 `SyntaxError: invalid syntax`

python - 类型错误 : cursor() got an unexpected keyword argument 'dictionary' using flaskext. mysql

python - 是否有更短的代码来连接字典的键和值?

python - 如何在 Mac OSX El Capitan 10.11 上为 Python 安装 qrtools?

python - Pandas 中的日期滞后

python - Django 表单上的多对多字段以逗号分隔文本而不是多重选择

python - 如何在python中读取json嵌入ini配置文件

python - 在 Python 中循环 zipfile 时,我怎么知道一个项目是一个目录?