1

为了

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

输出:

  2
  b
  b

A在做什么而B和C没有?B和C有什么区别?

4

1 回答 1

7

除了一点间接(lambda增加了一个额外的层)之外,B没有区别。C

A创建数字,然后取其中max()的。BCmax()列表中的 ,但biggest告诉max()如何确定列表中每个项目的相对值。

key函数扩充列表中的项目。将其视为创建元组;你从那里取出最大值,[(bigger('a'), 'a'), (bigger('b'), 'b')]然后再次解开元组,就像你做了max((bigger(letter), letter) for letter in l)[1]. 对于您的A版本,您改为替换元素。

于 2013-05-01T21:43:55.097 回答