64

2 つの有理数の間の距離を決定できる 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 には組み込みの関数またはモジュールがあり、コードよりも速く、まさにあなたが望むことを実行できることがよくわかりました。うまくいけば、これを行うことができる組み込み関数があることを誰かが教えてくれます。

4

10 に答える 10

130

abs(x-y)あなたが探していることを正確に行います:

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

In [2]: abs(2-1)
Out[2]: 1
于 2012-11-28T09:49:13.653 に答える
23

abs(x - y)同様に機能しますがabs(y - x)、次のワンライナーも機能します。

  • math.dist((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)

  • (x - y) * math.copysign(1, x - y)、または同等(d := x - y) * math.copysign(1, d)に Python ≥3.8

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

これらはすべてユークリッド距離(x, y)を返します。

于 2016-10-16T20:23:01.227 に答える
8

配列がある場合は、次も使用できますnumpy.diff

import numpy as np
a = [1,5,6,8]
np.diff(a)
Out: array([4, 1, 2])
于 2016-11-15T09:09:51.503 に答える
7

を使用するだけabs(x - y)です。これにより、どちらの値が大きいかに関係なく、2 つの正味の差が正の値として返されます。

于 2012-11-28T09:49:13.243 に答える
1

この機能を使用します。

あなたが望んでいたのと同じ規則です。Python の単純な abs 機能を使用します。

また、答えが単純すぎて見逃してしまうこともありますが、大丈夫です:)

>>> def distance(x,y):
    return abs(x-y)
于 2012-11-28T09:49:29.410 に答える
-1

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

print distance(-25, -15) print distance(25, -15) print distance(-25, 15) print distance(25, 15)

于 2016-11-15T14:36:30.510 に答える
-6

試すことができます: a=[0,1,2,3,4,5,6,7,8,9];

[abs(x[1]-x[0]) for x in zip(a[1:],a[:-1])]

于 2014-04-08T19:35:33.653 に答える