Python 作业:永无止境的循环5**200000
我有一个家庭作业:在数字5**200000中找到50000个连续数字的最大和。 我知道如果我在这个数字上做一个for循环,它不会在一个可行的时间内结束。 我试着把这个数字放在一个列表中,并在列表中迭代,但我不明白它是如何工作的?为什么不像第一种情况?什么使它更快? 这是我的密码:Python 作业:永无止境的循环5**200000,python,performance,loops,for-loop,python-3.x,Python,Performance,Loops,For Loop,Python 3.x,我有一个家庭作业:在数字5**200000中找到50000个连续数字的最大和。 我知道如果我在这个数字上做一个for循环,它不会在一个可行的时间内结束。 我试着把这个数字放在一个列表中,并在列表中迭代,但我不明白它是如何工作的?为什么不像第一种情况?什么使它更快? 这是我的密码: def maxdigits(number,digits): s=str(number) #conversting the number to a string l = [int(char) for ch
def maxdigits(number,digits):
s=str(number) #conversting the number to a string
l = [int(char) for char in s]
maximum = current = sum(l[:digits])
for i in range(0,len(l)-digits):
current = current-l[i]+l[i+digits]
if current > maximum: maximum = current
return maximum
代码运行得更快,因为它没有遍历列表
[ 0, 1, ..., 5 ** 200000 ]
您正在迭代
[ 0, 1, ..., 139 795 - 50000 ]
比第一个列表小几个数量级
计算数字位数的方法是:
200000 * log5 + 1
我想你是在问,为什么对数字
5**200000
的数字进行循环会很快完成,而对0
到(5**200000)-1
范围内的所有数字进行循环需要很长时间
我认为这对你来说不明显的唯一原因是因为这些数字很大,很难记下来。再想一想。在
1000000
的七位数字上循环,或者在0
到999999
的百万数字上循环,会更快吗?5**200000
中有139795
位。做一个简单的循环139795次
并不需要大量的工作。做一个简单的循环5**200000次是一个巨大的工作量。这是一个荒谬的数字。如果宇宙中的每一个原子都是一台计算机,并且在整个宇宙的生命周期中运行,我怀疑它们是否能够成功地做任何事情5**200000次。定义“数字5**200000中50000个连续数字的最大和”。这与数字之和有何不同?你是说50000个连续数字吗?无论如何,你这里的问题是关于数学洞察力,而不是代码。是的,我将5**200000转换为字符串。代码在我的机器上运行良好。你在做什么?我不清楚你在问什么。我想我理解这个任务,你的代码看起来要么正确,要么非常接近。你是说这比你想象的要快?你能不能提供你说的代码比较慢,因为你对它的描述对我来说不够清楚。