Python 在不知道哪个更大的情况下,如何找到两个值之间的差异?
我想知道Python中是否内置了一个函数,可以确定两个有理数之间的距离,但我不告诉它哪个数更大。 e、 g 显然,我可以写一个简单的定义来计算哪个更大,然后做一个简单的减法: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有一个内置的函数或模块,它
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)
工作,但以下一行程序也工作:
(在Python中)≥(3.8)数学距离((x,),(y,)
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)
≥3.8(d:=x-y)*math.copysign(1,d)
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