【问题标题】:Is there a more efficient way to compare multiple float values in an If statement in python? [duplicate]有没有更有效的方法来比较 Python 中的 If 语句中的多个浮点值? [复制]
【发布时间】:2016-06-27 13:43:20
【问题描述】:

我目前只使用这样的东西:

def match9(a,b,c,d,e,f,g,h,i):
if a==b and b==c and c==d and d==e and e==f and f==g and g==h and h==i:
    return 1
else:
    return 0

结合

temp = match9(d1s1,d1s2,d1s3,d1s4,d1s5,d1s6,d1s7,d1s8,d1s9)
if temp == 1:
    codeToBeActivated()

【问题讨论】:

  • 在什么方面更有效率?时间?空间?还是代码?
  • 你不应该首先使用==来比较floats。
  • 好吧,看来您想检查所有项目是否相等,所以您只需 set() 以保留唯一项目并计算结果长度。
  • def match9(*args): return functools.reduce(lambda x, y: x == y, args) - 不过,是的,== 和浮点数不能很好地混合。

标签: python python-3.x


【解决方案1】:

你可以使用快捷方式

if a == b == c == d == e == f == g == h == i:

或使用set 消除重复项,然后检查长度:

if len({a,b,c,d,e,f,g,h,i}) == 1:

话虽如此,使用== 比较floats 可能会因为浮点精度而导致错误。您可以尝试检查元素之间的差异。这是 Python >= 3.4 的示例:

from statistics import stdev
if stdev([a, b, c, d, e, f, g, h, i]) < 1e-6:  # Or some other threshold

【讨论】:

  • set 的技巧可能也会检查是否相等,这也是浮点数的一个问题,尤其是当它们来自不同来源时。
猜你喜欢
  • 2014-04-06
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多