Python:意外标记 min(gameinfo.not\u my\u planets.values(),key=lambda p:p如果p.num\u发货p如果p.num_本身发出=35,lambda应该返回什么?您需要使用或来完成它;e、 g.p是p.num\u船舶

Python:意外标记 min(gameinfo.not\u my\u planets.values(),key=lambda p:p如果p.num\u发货p如果p.num_本身发出=35,lambda应该返回什么?您需要使用或来完成它;e、 g.p是p.num\u船舶,python,lambda,Python,Lambda,试图得到最小的行星,但只有当行星上有35艘或更少的飞船时 获取意外的标记“)”尽管有任何想法?code>p如果p.num_本身发出=35,lambda应该返回什么?您需要使用或来完成它;e、 g.p是p.num\u船舶

试图得到最小的行星,但只有当行星上有35艘或更少的飞船时


获取意外的标记“)”尽管有任何想法?

code>p如果p.num_本身发出<35是无效语法。如果p.num\u ships>=35,lambda应该返回什么?您需要使用
来完成它;e、 g.
p是p.num\u船舶<35其他…
min
参数中的要点是为每个元素选择一个值,通过该值可以确定最小元素


你所说的“只有在有35艘船或更少的行星时”是什么意思?你的意思是,如果所有行星都有35艘以上的飞船,你根本不想要最小行星吗?

你错过了lambda表达式中的
else
部分,但你最好将其重写为:

min(gameinfo.not_my_planets.values(), key=lambda p: p if p.num_ships < 35)
如果你不习惯功能结构,只需使用简单的列表理解(我假设行星本身是可比的):

min(p代表gameinfo.not_my_plants.values()中的p,如果p.num_发货<35)

我甚至不确定lambda的意义是什么。。。根据您在评论中所说的内容选择另一个答案:

“选择拥有35艘或更多船只的行星”:

要“选择剩余的最小值”:

此外,为了解决没有35艘以下船只的行星的可能性:

min_planet_below_35 = min(planets_below_35, key=lambda p: p.num_ships)

我想让它选择拥有35艘或更多飞船的行星(这一范围内的最低值),然后一旦完成(否则)选择剩余的最小值它们之间的可比性-1“你不能在lambda表达式中使用
if
”——你肯定可以使用三元表达式
a if b else c
。添加另一个lambda非常有效。我不太熟悉函数式结构,但现在我会把它们弄得一团糟:)@George Veron我建议你用最后一句话。这是最干净的一个。如果行星是可比的,你不需要
lambda p:p.size
。Lambda必须始终返回一个值,因此如果p.numships<35,则原始Lambda可以是:p。99999一定比任何行星的大小都大。不管怎样,过滤掉不需要的行星比比较更干净。
min(filter(lambda p: p.num_ships < 35, gameinfo.not_my_planets.values()), key=lambda p:p.size)
min( p for p in gameinfo.not_my_planets.values() if p.num_ships < 35)
planets_35_or_higher = [p for p in gameinfo.not_my_planets.values() 
                        if p.num_ships >= 35])
planets_below_35 = [p for p in gameinfo.not_my_planets.values() 
                    if p.num_ships < 35])
min_planet_below_35 = min(planets_below_35)
min_planet_below_35 = min(planets_below_35, key=lambda p: p.num_ships)
if planets_below_35:
    min_planet_below_35 = min(planets_below_35)
else:
    # do something else