python - 带元组键的 Max 函数 [更新]

标签 python

我试图了解以下行中发生的情况:

print(max([1, -2, 3, -1], key=lambda x:(-abs(x), x), default=0))

我的理解是,lambda 将为列表 [1, -2, 3, -1] 中的每个元素返回一个元组。

但是如何将列表与元组进行比较呢?

为什么输出是 1,而不是 3?

我已经尝试过

print(max([1, -2, 3, -1], key=(-1, 1), default=0))

但它说 uple 不可调用

<小时/>

理解这里问题的关键是使用的关键函数。如果很难理解,建议您阅读this并使用 sort 而不是 max (因为 sort 会给你一个信息性答案)

我的理解:
步骤 1. lambda 函数转换 a = [1, -2, 3, -1]换一个新的b = [(-1, 1), (-2, -2), (-3, 3), (-1, 1)]
步骤2. max/sort将处理新列表b 。它会首先比较第一个元素,如果绑定(bind),则比较第二个
步骤3.转换sorted(b)a而言

最佳答案

max 函数遍历列表中的每个元素,并应用 lambda 函数来确定每个项目的值,从而为您提供:

[(-1,1), (-2,-2), (-3,3), (-1,-1)]

然后它运行 max,默认情况下它首先比较每个元组第一个索引处的项目。由于第一个元素在所有情况下都是负数,因此-1是最大的第一个元素,对应于原始中的1-1大批。由于存在平局,因此它会比较第二个元素,将 (-1,1) 作为新数组中最大的元素,该元素对应于原始数组中的 1

关于python - 带元组键的 Max 函数 [更新],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339499/

相关文章:

python - 共享库中使用的稀疏 BLAS 求解器不起作用(返回 '-1' )

python - 根据某些条件从模型中过滤数据

python - 有没有办法确定传递给 Hadoop/Dumbo/Mrjob 中的 map 作业的文件名?

python - 使用 Python 在 Tomcat CGI 中运行命令

python - 使用python下载时如何优雅地超时

python - 在python中,如何检查列表列表是否有重复项?

python -/admin/zinnia/entry/add/in Zinnia 的 ValueError?

python - flask:异常后停止服务器

python - 为什么 CherryPy session 不需要 key ?

python - 如何在 Plone 5 中移动搜索栏