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

时间:2018-09-12 01:15:48

标签: python lambda max

我不明白,为什么会这样:Cycle可以正常工作,但是lambda却不能。

# 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)
# doesn't work
max_len = len(max(self.walking_checkers, key=lambda checker: len(checker.positions)))

2 个答案:

答案 0 :(得分:1)

您实际上并不需要按键功能。而是直接在检查器位置长度的迭代器上执行max

max(len(checker.positions) for checker in self.walking_checkers)

这是因为带有max函数的key将返回带有最大checker的{​​{1}},而您实际上只对长度本身感兴趣。

答案 1 :(得分:0)

max()函数将返回具有最长checker属性的positions 对象,因此您需要对返回的内容应用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)