为何在该Python代码场景中max()函数返回值为7?
问题解析
先看你的代码逻辑:
l = [7, 9, 5, 6, 13, 5, 15, 3] t = max(l, key=lambda g:g if g%9==1 else 0)
你预期当列表中没有除以9余1的元素时,t等于0,但实际得到的是列表中的某个元素(这里你提到是7,按代码逻辑所有元素的key值都是0,实际应该返回列表最大元素15),核心原因如下:
max()函数的作用是从传入的可迭代对象(此处为列表l)中返回元素,它只会返回l里存在的元素,不会返回key函数里的0——因为0根本不在列表l中。- 当所有元素的
key计算结果都是0时,max()会在原列表的元素里比较,最终返回原列表中最大的那个元素(若多个元素key值相同,返回第一个出现的最大值)。
要实现你的需求(取除以9余1的最大元素,无符合条件元素则返回0),正确写法是先筛选符合条件的元素,再取最大值:
l = [7, 9, 5, 6, 13, 5, 15, 3] valid_elements = [x for x in l if x % 9 == 1] t = max(valid_elements) if valid_elements else 0
这样当没有符合条件的元素时,t就会是0。
内容的提问来源于stack exchange,提问作者CrossTick
相关产品推荐
相关产品推荐

