跳到内容

sorted-min-max (FURB192)

派生自 refurb 代码检查工具。

有时提供修复。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查是否使用 sorted() 来检索序列中的最小值或最大值。

为什么这不好?

使用 sorted() 来计算序列中的最小值或最大值效率低下,并且不如直接使用 min()max() 更易读。

示例

nums = [3, 1, 4, 1, 5]
lowest = sorted(nums)[0]
highest = sorted(nums)[-1]
highest = sorted(nums, reverse=True)[0]

建议改为

nums = [3, 1, 4, 1, 5]
lowest = min(nums)
highest = max(nums)

修复安全性

在某些情况下,迁移到 minmax 可能会导致行为改变,尤其是在打破平局时。

例如,如果列表中有多个具有相同键的元素,sorted(data, key=itemgetter(0), reverse=True)[0] 将返回列表中的最后一个“最小值”元素。但是,在相同情况下,min(data, key=itemgetter(0)) 将返回列表中的第一个“最小值”元素。

因此,当使用 reverse 关键字时,此规则的修复被标记为不安全。

参考