学习Python只需两个月,所以请耐心等待。)
偶然发现非常有趣的任务 - 使用数字( n: int, number of digits < 10**6 )
执行算术运算,表示为str ( len(str) < 10**6 )
。我需要将这个字符串分成几部分,制作一些简单的算术,并将输出作为字符串返回。转换为int和back需要大约0.5秒:
from time import time
from random import choice
string = ''
digits = [str(i) for i in range(10)]
for _ in range(1, 99999):
string += choice(digits)
start = time()
a, b = string[:50000], string[50000:] # Split in half
a, b = map(int, [a, b])
print('str to int:', time() - start)
# Output: str to int: 0.1092...
c = a + b
start = time()
output = ''.join([str(part) for part in [a, b, c]])
print('int to str:', time() - start)
# Output: int to str: 0.4836...
当我需要在数百次次迭代的循环中执行此操作时,问题就开始了
这是关于类似反向散列函数的东西
我的简单问题是 - 在这种情况下可以进行哪种优化?
致以最诚挚的问候! 。)
答案 0 :(得分:0)
Vadim,我无法直接回答你的问题。但是,让我指出gmpy2 library。主要作者是我们过去经常在这里看到的那些非常聪明的人之一;你可以使用gmpy2本身,或者查看源代码。
>>> from gmpy2 import *
>>> s = '012345678901234'
>>> t = '123456789012345'
>>> N = mpz(s)+mpz(t)
>>> N
mpz(135802467913579)
>>> str(N)
'135802467913579'