如何在不硬编码元素位置的情况下嵌套循环



我的问题看到我在漫长的数量中骑自行车,以便在上述数字中找到最大的5个连续数字的产品。我有一个解决方案,但目前涉及元素位置的硬编码,感觉/看起来丑陋并且不可扩展(如果我想要连续10个术语的总和怎么办?)。有没有办法" python"该解决方案并以某种方式进行嵌套或优化?

n = 82166370484403199890008895243450658541227588666881
N = str(n)
Pro = 0
for i in range(0, len(N) - 4):
    TemPro= int(N[i])*int(N[i+1])*int(N[i+2])*int(N[i+3])*int(N[i+4])
    if TemPro> Pro :
        Pro = TemPro
print(Pro )

OS:Windows 7
语言:Python 3

N的切片上使用reduce的完美案例:

from functools import reduce # python 3
nb_terms = 5
for i in range(0, len(N) - nb_terms - 1):
    TemPro= reduce(lambda x,y:int(x)*int(y),N[i:i+nb_terms])
    if TemPro> Pro :
        Pro = TemPro
print(Pro)

reduce将无需可见循环而无需硬编码术语数量。

您可以通过首先将整个整数转换为一系列数字,然后使用reducemul和slice来计算滑动窗口的产物。

from functools import reduce
from operator import mul
n = 82166370484403199890008895243450658541227588666881
def largest_prod(n, length=5):
    digits = [int(d) for d in str(n)]
    return max(reduce(mul, digits[i:i + length]) for i in range(len(digits) - length + 1))
print(largest_prod(n))

请注意,这种查找数字的方法在理论上是慢的 - 对于所有目的和目的而言,它足够快,但是它涉及一些不必要的对象创建。如果您真的在乎性能,则可以使用类似于我在此处讨论的算术方法。

相关内容

最新更新