将数组中的元素相乘(Python)

将数组中的元素相乘(Python),python,arrays,list,append,Python,Arrays,List,Append,我想问一个问题,我需要找到一个长数字中包含的两位数的最大乘积: Number = 73167176531330624919225119674426574742355349194934 lst = [int(i) for i in str(Number)] print(lst) new_lst = [] for i in lst: new_lst.append(i*(i+1)) print(new_lst) 然而,我在上面尝试的结果是56,我如何乘以7*3,然后乘以3*1,

我想问一个问题,我需要找到一个长数字中包含的两位数的最大乘积:

Number = 73167176531330624919225119674426574742355349194934

lst = [int(i) for i in str(Number)]
print(lst)

new_lst = []

for i in lst:
    new_lst.append(i*(i+1))
    print(new_lst)
然而,我在上面尝试的结果是56,我如何乘以7*3,然后乘以3*1,依此类推

为H编辑

Number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

lst = [int(i) for i in str(Number)]
print(lst)

new_lst = []

for i, value in enumerate(lst):
    new_lst.append(lst[i-13]*(lst[i-12])*(lst[i-11])*(lst[i-10])*(lst[i-9])*(lst[i-8])*(lst[i-7])*(lst[i-6])*(lst[i-5])*(lst[i-4])*(lst[i-3])*(lst[i-2])*(lst[i-1]))
print(max(new_lst))

您当前正在将数字i乘以i+1。您可以使用
range
这样做:

for i in range(len(lst)-1):
        new_lst.append(lst[i]*(lst[i+1]))
        print(new_lst)

itertools
有一个方法可以实现这一点


严格使用整数算术的版本(与字符串相反):


更新以显示这将如何适用于您当前的问题(您将查找13个相邻数字的最大乘积):


您可以迭代一个
zip
列表和其中的一个片段,开头不同于1:

max(a * b for a, b in zip(lst, lst[1:]))

这将返回:
54
(因为编号中有
9
6

number=73167176531330624919225119744265742355349194934

lst=[int(i)表示str中的i(Number)] 打印(lst)

新的_lst=[]

对于X范围内的i(透镜(lst)-1): 新的附加(lst[i]*lst[i+1])
打印新的\u lst

您可能想要这样的东西:

Number = 73167176531330624919225119674426574742355349194934

print(max(int(x)*int(y) for x, y in zip(str(Number)[:-1], str(Number)[1:])))

答案是54(9*6)

您不需要创建列表来计算一个iterable的最大值。这将是低效的。以下是使用
max
map
mul
的功能解决方案:

from operator import mul

x = '73167176531330624919225119674426574742355349194934'

res = max(map(mul, map(int, x), map(int, x[1:]))) # 54

您迭代的是值,而不是索引。您可能希望对范围内的i(len(lst))使用
,但对枚举(lst)中的i,v使用
更好。玩得开心。你的“两位数”必须相邻吗?或者你是在寻找81作为你的最终结果(因为有多个9)。@jpp它们必须相邻
索引器:列表索引超出范围
请随意编辑和添加检查@timgeb你可以添加一系列异常处理,但这不是主要问题你似乎忘记了最后一个数字,
列表索引超出范围
@hakaishin-请参见编辑,我已经调整了您的答案,以适应我真正想要回答的问题,我希望与此形成一个循环始终更好,以便能够概括一个解决方案并使其成为一个函数!现在,我将尝试将其扩展到13位,在调用
max()
call之前定义
str(Number)
一次
operator.mul(*map(int,max)(zip(str(Number)[:-1],str(Number)[1:]))
@Chris Rands类似的答案已经在使用函数方法了。
max(a * b for a, b in zip(lst, lst[1:]))
Number = 73167176531330624919225119674426574742355349194934

print(max(int(x)*int(y) for x, y in zip(str(Number)[:-1], str(Number)[1:])))
from operator import mul

x = '73167176531330624919225119674426574742355349194934'

res = max(map(mul, map(int, x), map(int, x[1:]))) # 54