完全披露:这是一项任务。简单地获取工作代码就足够了,但是在三行中这样做会让我获得额外的荣誉。
我正在尝试取一个1000位的字符串,找到连续5位数的最大乘积。你可能会认识到这是Project Euler的问题#8。
我尝试了很多选择,但我似乎陷入困境。我正在努力弄清楚我是否可以制作一个lambda
声明,但我没有lambda
的经验,所以它正在回避我。
这是我到目前为止所拥有的:
for i in range(1, 996):
max = int(number[i+0]) * int(number[i+1]) * int(number[i+2]) * int(number[i+3]) * int(number[i+4]) if max < int(number[i+0]) * int(number[i+1]) * int(number[i+2]) * int(number[i+3]) * int(number[i+4]) else max = max
return max
这不起作用并触发SyntaxError: can't assign to conditional expression
。
我不想要直接的代码,或者至少不是一个完整的功能,而只是帮助我理解如何向前发展。
答案 0 :(得分:2)
这不是合法的python:
x = y if z else x = w
这是:
x = y if z else w
这就是:
if z: x = y
顺便说一句,有一个单行解决方案,比你的三个解决方案更短更清晰。
答案 1 :(得分:1)
=
在您的(很长)行中出现两次。实际上你有这个:
max = something if something else max = max
Python解析为:
max = (something if something else max) = max
而且,实际上,你不能分配一个条件表达式,这就是中间的整个事物。
你可能不打算最后有= max
。
答案 2 :(得分:1)
查看:
答案 3 :(得分:1)
In [15]: def myinput(l,n):
...: for x in l:
...: yield l[x:x+n]
...:
In [16]: max([reduce(lambda a,b:a*b, x) for x in myinput(range(1000),5) if len(x)==5])
Out[16]: 985084775273880L
答案 4 :(得分:1)
就像提到的递归一样,有一个简单的单线解决方案。它涉及使用max
函数 - 在内置函数之后总是不好命名变量!
在Python 2中,它看起来像这样:
max(reduce(lambda x, y: x*y, map(int, num[i:i+5])) for i in xrange(996))
在Python 3 reduce
已删除,因此您必须通过functools
:
from functools import reduce
max(reduce(lambda x, y: x*y, map(int, num[i:i+5])) for i in range(996))