用三行代码在Python中查找字符串中的最大乘积

用三行代码在Python中查找字符串中的最大乘积,python,Python,完全披露:这是一项任务。简单地获得工作代码就足够了,但分三行完成这项工作会给我额外的学分 我试着用一个1000位的字符串,找出5个连续数字的最大乘积。你可能会意识到这是欧拉计划的问题#8 我尝试了很多选择,但我似乎被卡住了。我正在努力弄清楚我是否可以做一个lambda语句来工作,但是我没有lambda的经验,所以它回避了我 以下是我目前掌握的情况: for i in range(1, 996): max = int(number[i+0]) * int(number[i+1]) * in

完全披露:这是一项任务。简单地获得工作代码就足够了,但分三行完成这项工作会给我额外的学分

我试着用一个1000位的字符串,找出5个连续数字的最大乘积。你可能会意识到这是欧拉计划的问题#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
范围(1996)内的i的
:
max=int(数字[i+0])*int(数字[i+1])*int(数字[i+2])*int(数字[i+3])*int(数字[i+4]),如果max
这不起作用并触发
语法错误:无法分配给条件表达式


我不想要直接的代码,或者至少不是一个完整的函数,但我只需要一点帮助来理解如何前进。

这不是合法的python:

x = y if z else x = w
这是:

x = y if z else w
这就是:

if z: x = y

顺便说一下,有一个单行解决方案,它比三行解决方案短得多,也更清晰。

=
在您的(很长的)行中出现两次。事实上,你有:

max = something if something else max = max
哪些Python解析为:

max = (something if something else max) = max

和,实际上,不能赋值给条件表达式,这是中间的整个事物。

您可能不希望在结尾处有最终的
=max

查看:

  • 内置的max函数查找序列中的最大数
  • 内置映射函数将函数应用于列表中的所有元素
  • 内置的reduce函数通过将单个对象重复返回给列表中的两个元素,从而获得单个对象
  • lambda定义为了能够定义可以传递给map()和reduce()的函数对象
  • 列出理解(和生成器,它们非常相似)以在一行中组成上述函数

与前面提到的递归一样,有一个简单的单线性解决方案。它涉及到使用
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))

我不知道你在问什么。。。我没有要求任何人给我额外的学分,只是为了引导我朝着正确的方向前进。我已经阅读了几个小时的Python API,现在还没有像今天早上那样接近一个解决方案。他说你应该接受你之前的一些问题的答案。该死的Python。。。实际上,在任何其他语言中,3行要求都是毫无意义的。@ValekHalfHeart:将其视为您最喜欢的语言中的3分号规则。@Oh!对不起,我还在学习这里的所有功能。。我不知道选择正确答案的选项!不过我已经纠正了那个错误。我真的很抱歉!单线解决方案?有趣!不过,到目前为止,这个条件表达式仍然有问题。那么,如果我说
if(max<…):max=…
在语法上正确吗?非常好,谢谢。我已经做了必要的更改,但是我必须在单独的一行中定义
max
,然后才能在条件表达式中使用它。有没有更好的方法,不用额外的线路?谢谢!我现在对这个有了更好的了解。因此,附加条款不允许使用不同的电势“=”。。。我会记住:)你在给
max
赋值,所以这并不重要:)(顺便说一句,这对一个变量来说是个坏名字;python有一个名为
max
)的内置函数。我为我的原始答案接受了向上投票而感到内疚,所以我详细阐述了它。没必要感到内疚!以前很棒,现在也很棒!
from functools import reduce
max(reduce(lambda x, y: x*y, map(int, num[i:i+5])) for i in range(996))