如何找到不知道这是更大的两个值之间的差异?(How do I find the difference

2019-07-04 05:07发布

我想知道是否有内置的Python功能,可确定两个有理数之间,但没有我告诉它哪个号码是较大的距离。 例如

>>>distance(6,3)
3
>>>distance(3,6)
3

很显然,我可以写一个简单的定义来计算哪个更大,然后就做一个简单的减法:

def distance(x, y):
    if x >= y:
        result = x - y
    else:
        result = y - x
    return result

但我宁愿没有这样调用自定义函数。 从我有限的经验,我经常发现Python有一个内置的功能,或者你想要做什么,比你的代码确实能更快的模块。 希望有人能告诉我有一个内置的功能,可以做到这一点。

Answer 1:

abs(xy)会做的正是你要寻找的:

In [1]: abs(1-2)
Out[1]: 1

In [2]: abs(2-1)
Out[2]: 1


Answer 2:

如果你是好奇一个不同的答案,下面的俏皮话也工作:

  • max(x - y, y - x)

  • max(x, y) - min(x, y)

  • functools.reduce(operator.sub, sorted([x, y], reverse=True))

使用abs(x - y)当然是优选的。



Answer 3:

如果你有一个数组,你也可以使用numpy.diff

import numpy as np
a = [1,5,6,8]
np.diff(a)
Out: array([4, 1, 2])


Answer 4:

只要使用abs(x - y) 这将返回两者之间的净差值为正值,不管哪个值较大。



Answer 5:

这并没有解决原来的问题,但我想我会扩大zinturs给出了答案。 如果你想确定的任意两个数字之间的适当签名的距离,你可以使用像这样的自定义函数:

import math

def distance(a, b):
    if (a == b):
        return 0
    elif (a < 0) and (b < 0) or (a > 0) and (b > 0):
        if (a < b):
            return (abs(abs(a) - abs(b)))
        else:
            return -(abs(abs(a) - abs(b)))
    else:
        return math.copysign((abs(a) + abs(b)),b)

print(distance(3,-5))  # -8

print(distance(-3,5))  #  8

print(distance(-3,-5)) #  2

print(distance(5,3))   # -2

print(distance(5,5))   #  0

print(distance(-5,3))  #  8

print(distance(5,-3))  # -8

请分享更简单或更Python的方法,如果你有一个。



Answer 6:

使用此功能。

你想它的相同的约定。 使用python的简单的ABS功能。

也 - 有时答案是如此简单,我们怀念他们,它的好:)

>>> def distance(x,y):
    return abs(x-y)


Answer 7:

ABS功能,绝对不是你所需要的,因为它没有计算距离。 尝试ABS(-25 + 15)地看到,它不工作。 数字之间的距离是40,但输出将是10,因为它是做数学,然后在前面删除“减”。 我使用这个自定义函数:

 def distance(a, b): if (a < 0) and (b < 0) or (a > 0) and (b > 0): return abs( abs(a) - abs(b) ) if (a < 0) and (b > 0) or (a > 0) and (b < 0): return abs( abs(a) + abs(b) ) 

打印距离(-25,-15)的打印距离(25,-15)打印距离(-25,15)打印的距离(25,15)



Answer 8:

如果你打算使用张贴披签署的距离计算片段(像我一样),你的B可能有值0,你可能需要如下所述修复代码:

import math

def distance(a, b):
    if (a == b):
        return 0
    elif (a < 0) and (b < 0) or (a > 0) and (b >= 0): # fix: b >= 0 to cover case b == 0
        if (a < b):
            return (abs(abs(a) - abs(b)))
        else:
            return -(abs(abs(a) - abs(b)))
    else:
        return math.copysign((abs(a) + abs(b)),b)

原来的片段并不关于符号当> 0和b == 0正常工作。



Answer 9:

如果你并不需要一个有符号整数,这是使用了稍微不同的方法,是容易阅读和不需要进口替代:

def distance(a, b):
  if a > 0 and b > 0:
    return max(a, b) - min(a, b)
  elif a < 0 and b < 0:
    return abs(a - b)
  elif a == b:
    return 0
  return abs(a - 0) + abs(b - 0)


Answer 10:

您可以尝试:A = [0,1,2,3,4,5,6,7,8,9]

[ABS(X [1] -x [0])在拉链X(B [1:],A [: - 1])]



文章来源: How do I find the difference between two values without knowing which is larger?