我不明白,为什么会这样: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)))
答案 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)