Подсчитайте, сколько раз числа увеличиваются в списке Python

#python #python-3.x #list

#python #python-3.x #Список

Вопрос:

У меня есть этот список чисел: {199, 200, 208, 210, 200, 207, 240}.

  1. Я хочу определить, как числа увеличиваются или уменьшаются в списке. Например, после 199 у меня есть 200, это разница в 1. Но после 200 у меня есть 208, что составляет разницу в 8. Как мне определить эту меру увеличения / уменьшения для всего списка в Python?
  2. Во-вторых, я хочу подсчитать, во сколько раз увеличиваются числа. Поскольку список состоит из увеличивающихся и уменьшающихся чисел, я просто хочу подсчитать, во сколько раз он увеличивается.

Спасибо.

Ответ №1:

Вы можете использовать zip () для сопряжения элементов с их преемниками и обработки их в виде списков:

 numbers = [199, 200, 208, 210, 200, 207, 240]

increments = [b-a for a,b in zip(numbers,numbers[1:]) if b>a]
decrements = [b-a for a,b in zip(numbers,numbers[1:]) if a>b]

print(increments)      # [1, 8, 2, 7, 33]
print(decrements)      # [-10]
print(len(increments)) # 5
 

Вы также можете получить количество увеличивающихся пар напрямую (без построения списка приращений):

 sum(b>a for a,b in zip(numbers,numbers[1:]))  # 5
 

Комментарии:

1. Спасибо 🙂 Это работает. Что, если я хочу подсчитать, на сколько измерений больше предыдущего измерения? В этом примере есть 7 измерений, которые больше, чем предыдущие измерения.

2. Я не уверен, что вы подразумеваете под «больше, чем предыдущее измерение», если ожидаемый результат равен 7. Есть только 5 измерений, которые больше, чем их предшественники (как указано в моем примере).

Ответ №2:

Обращаясь к вашей проблеме № 1, вы можете рассчитать корреляцию Спирмена с увеличением значений x. Он имеет значение в диапазоне [-1, 1], если значение положительное, то y увеличивается с увеличением x, если значение отрицательное, то y уменьшается с увеличением x, если значение равно нулю, то корреляции нет. Если значение велико, например, близко к 1 или -1, то это убедительно свидетельствует о том, что оба данные сильно коррелируют. Таким образом, даже если вы не выводите данные, вы уже можете определить, является ли тренд положительным или отрицательным или не имеет отношения, зная значение Спирмена.

Код

 from scipy.stats import spearmanr
import matplotlib.pyplot as plt


y = [199, 200, 208, 210, 200, 207, 240]
x = range(len(y))

# calculate spearman's correlation
corr, _ = spearmanr(x, y)
print('Spearmans correlation: %.3f' % corr)

plt.plot(x, y, '--*')
plt.savefig('corr.png')
plt.show()
 

Вывод

 Spearmans correlation: 0.667
 

введите описание изображения здесь

Ссылки

Ответ №3:

 l = [199,200,208,210,200,207,240]

diff = [l[i 1] - l[i] for i in range(len(l) - 1)]

# count the number of increasing changes
num_inc = sum([l[i 1] > l[i] for i in range(len(l) - 1)]) # 5
 

Комментарии:

1. Кроме того, нет необходимости в квадратных скобках во второй строке sum(l[i 1] > l[i] for i in range(len(l)))