我想知道是否有内置的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:
如果你是好奇一个不同的答案,下面的俏皮话也工作:
使用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?