max()的不同面

时间:2013-05-01 21:41:53

标签: python python-3.x max

对于

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

B和C没有做什么? B和C之间有什么区别?

1 个答案:

答案 0 :(得分:7)

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

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

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