Существует несколько стратегий обнаружения выбросов. Определение выброса - это то, что имеет значение в конце дня. Если вам нужно простое вычисление, как вы описали, вы можете сделать что-то вроде этого:
import numpy as np
# heights
hs = [43, 17, 23, 24, 17, 27, 19, 19, 24, 22, 8, 8, 26, 25, 18, 19, 20, 20, 20, 21, 20,
20, 22, 18, 18, 19, 19, 16, 13, 20, 20, 19, 19, 20, 13, 20, 18, 18, 13, 12, 19,
25, 17, 13, 38, 38, 20, 19, 16]
# let's say that an outlier is a height that is farther than 2*std from the mean
outliers_definition = np.abs(hs - np.mean(hs)) > 2 * np.std(hs)
# you can get their indexes this way
outliers_idx = np.argwhere(outliers_definition)
print(outliers_idx)
# array([[ 0],
# [44],
# [45]], dtype=int64)
Обратите внимание, что mean
здесь также учитывает выбросы. Вы можете использовать median
, например. Если вы хотите что-то более надежное, существует обширная литература по обнаружению выбросов. Я рекомендую вам взглянуть на это.