Python:意外的标记

2024-05-16 22:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

min(gameinfo.not_my_planets.values(), key=lambda p: p if p.num_ships < 35)

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

有什么想法吗?在


Tags: lambdakeyifmynot行星minnum
3条回答

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

min(filter(lambda p: p.num_ships < 35, gameinfo.not_my_planets.values()))

filer(...)将把行星的序列减少到那些拥有{}的行星。是planet物体之间的可比性,还是你应该将其与一个属性行星相比较, planet.size?如果是这样,则必须添加另一个lambda:

^{pr2}$

如果你不习惯函数结构,只需使用简单的列表理解(我假设行星在它们之间是可比较的):

min( p for p in gameinfo.not_my_planets.values() if p.num_ships < 35)

我不知道那个兰姆达到底是什么意思。。。根据你在评论中所说的对另一个答案:

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

planets_35_or_higher = [p for p in gameinfo.not_my_planets.values() 
                        if p.num_ships >= 35])

“选择剩余的最小值”:

^{pr2}$

或者,如果行星对象没有比较运算符,请给min一个函数来获取它应该用于比较的属性,如下所示:

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

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

if planets_below_35:
    min_planet_below_35 = min(planets_below_35)
else:
    # do something else

p if p.num_ships < 35本身就是无效语法。如果p.num_ships >= 35,lambda应该返回什么?您需要用else;例如p is p.num_ships < 35 else ...来完成它。minkey参数中的要点是为每个元素选择一个值,根据该值可以确定最小元素。在

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

相关问题 更多 >