【发布时间】:2018-06-16 13:01:21
【问题描述】:
我正在用 python 解决大量阶乘,并发现当我计算完阶乘时,转换为字符串以保存到文件需要相同的时间。我试图找到一种将 int 转换为字符串的快速方法。我将举一个计算和int转换时间的例子。我正在使用通用的 a = str(a) 但我觉得有更好的方法,比如使用缓冲区或库。
前:
求解 100,000 个阶乘 = 456,574 个数字
计算时间:6.36 秒
转换时间:5.20 秒
如果您有任何问题/解决方案,请告诉我!任何事情都会有所帮助。
import time
factorial = 1
print(" ")
one = int(input("lower = "))
two = int(input("higher = "))
start = time.time()
for x in range(one,two + 1):
factorial = factorial * two
two = two - 1
end = time.time()
print("DONE! ")
print(end - start, "Seconds to compute")
start = time.time()
factorial = str(factorial)
f = open('Ans_1.txt','w')
f.write(factorial)
f.close()
end = time.time()
print(end - start, "Seconds to convert and save")
print(len(factorial), "Digets")
【问题讨论】:
-
我们也需要查看您的代码。考虑将
int转换为str;str(int)最快。但绝对可以在您的阶乘逻辑中改进一些东西 -
@MoinuddinQuadri 我不确定他的阶乘逻辑可以改进多少。我正在使用
math.factorial(100000)获得类似的运行时 -
如果 OP 使用的是
math.factorial,那么我怀疑 Python 2.7 可以做些什么。在 Python 3 中它会相对更快。这是Why is math.factorial much slower in Python 2.x than 3.x? 可能感兴趣的讨论 -
我认为没有更快的方法将其保存到字符串中,因为这是内置的方法。 @chrisz:
math.factorial(100000)比在 Python 3 中使用此代码快大约 20 倍。我已经尝试了 30 多种不同的算法,试图获得比math过去更快的时间,但最终放弃了。如果 OP 想让这段代码更快,我建议尽量减少涉及大量数字的步骤。存储大数字需要更多时间来存储小数字。 -
试试 pypy :D
标签: python string python-2.7 type-conversion converter