python - max() 的不同面孔

标签 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

A 做了哪些 B 和 C 没有做的事情? B和C有什么区别?

最佳答案

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

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

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

关于python - max() 的不同面孔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327014/

相关文章:

python - Django - 在哪里编写简单缩略图自定义缩略图制作器的代码?

python - Blender 2.6 JSON 导出器,纹理仅在立方体的一侧错误

Python3 切片,TypeError : list indices must be integers or slices, 未列出

python - 将游戏名称添加到文件中?

r - 提取R中字符向量中的所有最大长度值

c# - 如何在linq中选择最大的字符串到nhibernate

python - 如何在 revitpythonshell 中选择正确的 LoadFamily 函数

具有默认值的python模板

python - 如何使用一个类来调用不同的类?

mysql - 如何根据三列选择具有 MAX 的行