Подтвердить что ты не робот

Как найти разницу между двумя значениями, не зная, что больше?

Мне было интересно, есть ли в 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 есть встроенная функция или модуль, который делает именно то, что вы хотите, и быстрее, чем ваш код. Надеюсь, кто-то может сказать мне, что есть встроенная функция, которая может сделать это.

4b9b3361

Ответ 1

abs(x-y) сделает именно то, что вы ищете:

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

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

Ответ 2

Если вам интересно узнать другой ответ, следующие однострочные работы также работают:

  • max(x - y, y - x)

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

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

Использование abs(x - y), безусловно, является предпочтительным.

Ответ 3

Если у вас есть массив, вы также можете использовать numpy.diff:

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

Ответ 4

Просто используйте abs(x - y). Это вернет чистую разницу между ними как положительное значение, независимо от того, какое значение больше.

Ответ 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

Пожалуйста, используйте более простые или более питонические подходы, если у вас есть.

Ответ 6

используйте эту функцию.

это то же самое соглашение, которое вы хотели. используя простую функцию абзаца питона.

также - иногда ответы настолько просты, что мы их пропускаем, все в порядке:)

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

Ответ 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) )

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

Ответ 8

Если вы планируете использовать подписанный фрагмент расчета расстояния, опубликованный 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)

Исходный фрагмент не работает корректно в отношении знака, когда a> 0 и b == 0.

Ответ 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)

Ответ 10

Вы можете попробовать: а = [0,1,2,3,4,5,6,7,8,9];

[abs (x [1] -x [0]) для x в zip (a [1:], a [: - 1])]