将数组中的元素相乘(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