You need to enable JavaScript to run this app. Python3中使用set时的浮点数比较规则是什么?
优惠活动
大模型
产品
解决方案
定价
更多

Python3中使用set时的浮点数比较规则是什么?

Python3 set 对浮点数的比较规则
  • 使用set处理存储浮点数的列表时,完全不会引入基于机器epsilon的容差相等校验,整个比较过程执行的是严格的位级相等判断。

原生set结构本身不实现任何自定义的元素比较逻辑,去重流程完全依赖传入元素自身的内置方法:

  1. 计算待插入元素的哈希值,定位对应的存储桶位置
  2. 当桶内已存在和当前元素哈希值完全相等的元素时,才会触发两个元素的==判断,决定是否将当前元素判定为重复项去重
  • Python 内置float类型的__eq__方法没有内置容差逻辑,只有当两个浮点数的二进制存储表示完全一致时,才会被判定为相等。哪怕两个值的数学差值远小于双精度浮点数的机器epsilon,只要位表示存在哪怕1比特的差异,就会被判定为不同的集合元素。
  • 可复现的实际运行示例:
    xs = [0.1 + 0.2, 0.3]
    print(set(xs))  # 输出:{0.30000000000000004, 0.3}
    
    示例中两个值的实际差值约为5.55e-17,远小于双精度浮点数的机器epsilon(约2.22e-16),但因为位表示存在差异,依然会被set识别为两个独立元素。
  • 如果需要实现带指定容差的浮点数去重,需要自行封装比较逻辑,无法直接依赖原生set的默认行为。

内容的提问来源于stack exchange,提问作者bzm3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 02:36:02