max()的不同面

Eas*_*led 1 python max python-3.x

对于

l = ["a", "b"]
def bigger(x):
    if x == "a":
        return 1
    return 2
print(max(bigger(letter) for letter in l)) #A
print(max(l, key=bigger))                  #B
print(max(l, key=lambda x: bigger(x)))     #C
Run Code Online (Sandbox Code Playgroud)

输出:

  2
  b
  b
Run Code Online (Sandbox Code Playgroud)

什么是B和C不是这样做?B和C有什么区别?

Mar*_*ers 7

之间不存在差异B并且C除了一点间接(拉姆达增加了额外的层).

A创造数字,然后采取max()那些.BC获取max()列表,但biggest告诉max()如何确定列表中每个项目的相对值.

key函数扩充了列表中的项目.将其视为创建元组; [(bigger('a'), 'a'), (bigger('b'), 'b')]从那时起取出最大值,然后重新打开元组,就好像你一样max((bigger(letter), letter) for letter in l)[1].对于您的A版本,您可以替换元素.