Python lambda函数作为键参数不适用于max()函数

Python lambda函数作为键参数不适用于max()函数,python,lambda,max,Python,Lambda,Max,我不明白,为什么会这样:Cycle工作正常,但lambda不正常 在这里,您并不真正需要一个键函数。相反,直接在棋盘格位置长度的迭代器上执行max max(len(checker.positions) for checker in self.walking_checkers) 这是因为带有键函数的max将返回具有最大lenchecker.positions的checker,而您只对长度本身感兴趣。max函数将返回具有最长位置属性的checker对象,因此您需要对返回的对象应用len。请参见下文

我不明白,为什么会这样:Cycle工作正常,但lambda不正常


在这里,您并不真正需要一个键函数。相反,直接在棋盘格位置长度的迭代器上执行max

max(len(checker.positions) for checker in self.walking_checkers)
这是因为带有键函数的max将返回具有最大lenchecker.positions的checker,而您只对长度本身感兴趣。

max函数将返回具有最长位置属性的checker对象,因此您需要对返回的对象应用len。请参见下文,了解使此方法像for循环一样工作所需的更改:

# type of self.walking_checkers is list, checker.positions too.
# works
max_len = 0
for checker in self.walking_checkers:
    if len(checker.positions) > max_len:
        max_len = len(checker.positions)

print(max_len)

# Also works (with change shown).
#max_len = len(max(self.walking_checkers, key=lambda checker: len(checker.positions)))
max_len = len( max(self.walking_checkers, key=lambda checker: len(checker.positions)).positions )
print(max_len)

您好,欢迎来到Stack Overflow。然而,不幸的是,你的问题无法回答,因为我们没有足够的信息。根据我的测试,它做了我想要它做的令人满意的事情。关键问题是——不要说不起作用,而不说它做了什么。有错误吗?哪一个你得到了一个错误的结果吗?你希望得到什么?你希望得到什么?这是在取笑你的狗吗?以哪种方式?等等,说它不起作用就像去医生的办公室说我有毛病,猜猜是什么!是的,当然!谢谢你,太好了真的很好,谢谢
# type of self.walking_checkers is list, checker.positions too.
# works
max_len = 0
for checker in self.walking_checkers:
    if len(checker.positions) > max_len:
        max_len = len(checker.positions)

print(max_len)

# Also works (with change shown).
#max_len = len(max(self.walking_checkers, key=lambda checker: len(checker.positions)))
max_len = len( max(self.walking_checkers, key=lambda checker: len(checker.positions)).positions )
print(max_len)