Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不知道哪个更大的情况下,如何找到两个值之间的差异?_Python_Function_Numbers_Distance - Fatal编程技术网

Python 在不知道哪个更大的情况下,如何找到两个值之间的差异?

Python 在不知道哪个更大的情况下,如何找到两个值之间的差异?,python,function,numbers,distance,Python,Function,Numbers,Distance,我想知道Python中是否内置了一个函数,可以确定两个有理数之间的距离,但我不告诉它哪个数更大。 e、 g 显然,我可以写一个简单的定义来计算哪个更大,然后做一个简单的减法: def distance(x, y): if x >= y: result = x - y else: result = y - x return result 但我不想调用这样的自定义函数。 根据我有限的经验,我经常发现Python有一个内置的函数或模块,它

我想知道Python中是否内置了一个函数,可以确定两个有理数之间的距离,但我不告诉它哪个数更大。 e、 g

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

def distance(x, y):
    if x >= y:
        result = x - y
    else:
        result = y - x
    return result
但我不想调用这样的自定义函数。 根据我有限的经验,我经常发现Python有一个内置的函数或模块,它可以精确地执行您想要的操作,并且比您的代码执行的更快。希望有人能告诉我有一个内置函数可以做到这一点。

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

abs(x-y)
将完全满足您的要求:

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

In [2]: abs(2-1)
Out[2]: 1
使用此功能

这和你想要的一样。 使用python的简单abs特性

还有——有时候答案很简单,我们会想念它们,没关系:)

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

[abs(x[1]-x[0]),用于zip中的x(a[1:],a[:-1])

虽然
abs(x-y)
或等效
abs(y-x)
工作,但以下一行程序也工作:

  • 数学距离((x,),(y,)
    (在Python中)≥(3.8)

  • math.fabs(x-y)

  • max(x-y,y-x)

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

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

  • Python中的
    (x-y)*math.copysign(1,x-y)
    ,或等效
    (d:=x-y)*math.copysign(1,d)
    ≥3.8

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


所有这些都返回欧几里德距离(x,y)。

如果有数组,还可以使用:


abs功能绝对不是您需要的,因为它不是计算距离。试试abs(-25+15),看看它是否不起作用。数字之间的距离为40,但输出为10。因为它在做数学运算,然后去掉前面的负号。我正在使用此自定义函数:


def距离(a、b):
如果(a<0)和(b<0)或(a>0)和(b>0):
返回abs(abs(a)-abs(b))
如果(a<0)和(b>0)或(a>0)和(b<0):
返回abs(abs(a)+abs(b))

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

这并没有解决最初的问题,但我想我会在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
导入数学
def距离(a、b):
如果(a==b):
返回0
elif(a<0)和(b<0)或(a>0)和(b>0):
如果(a

如果有更简单或更多的python方法,请与我们分享。

如果您计划使用phi发布的带符号距离计算片段(就像我做的那样),并且您的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)
导入数学
def距离(a、b):
如果(a==b):
返回0
elif(a<0)和(b<0)或(a>0)和(b>=0):#修复:b>=0以覆盖情况b==0
如果(a

当a>0且b==0时,原始代码段在符号方面无法正常工作。

如果您不需要有符号整数,这是一种使用稍微不同的方法的替代方法,易于阅读且不需要导入:

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)
def距离(a、b):
如果a>0且b>0:
返回最大值(a,b)-最小值(a,b)
elif a<0和b<0:
返回abs(a-b)
如果a==b:
返回0
返回abs(a-0)+abs(b-0)
如此简单,只需使用abs((a)-(b))

将无缝工作,无需额外注意标志(正面、负面)


abs(-25-15)=abs(15--25)=40
。我不知道您为什么使用
abs(-25+15)
——在这种情况下使用
abs
是不正确的。至于距离,
def distance(a,b):返回abs(a-b)
。问题是距离。例如,-25和-15之间的距离不是40而是10,那又怎样?将
abs(a-b)
中的
a
b
替换为-25和-15得到10,而不是40。总之,
abs(a-b)
适用于距离。第一个答案中提到了这一点,而不是在你的答案中。同样的测试通过了:导入数学定义距离(a,b):返回(max(a,b)-min(a,b))*(-1如果a>b,则为-1)pansay提供的答案肯定是这个问题的最佳答案吗?这个js是一个荒谬而无意义的答案,因为
abs(a-b)
在任何情况下都适用于距离。但在动态传递数字时,您将面临符号问题。下面分享了一个有效的解决方案。请查收

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) )

print distance(-25, -15) print distance(25, -15) print distance(-25, 15) print distance(25, 15)
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
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)
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)
def get_distance(p1,p2):
     return abs((p1) - (p2))

get_distance(0,2)
2

get_distance(0,2)
2

get_distance(-2,0)
2

get_distance(2,-1)
3

get_distance(-2,-1)
1