Решение максимальной дельты в массиве - PullRequest
0 голосов
/ 27 декабря 2018

У меня проблемы с определением моего максимального значения, рассчитанного в цикле for.Я использую Python для оценки массива, чтобы определить максимальную дельту в последовательности, т.е. максимальное значение i + 1-i.

У меня две проблемы:

  1. SyntaxError: 'return' вне функции
  2. Я не знаю, как извлечь наибольшее вычисленное итерированное значение из моегоfor loop

Пробовал использовать другие переменные для сравнения наибольших значений и т. д.

prices=[7,1,5,3,6,4]
profit_loss=0
for i in range(0,len(prices)-1):
        profit_loss=prices[i+1] - prices[i]
        return(profit_loss)
        print(profit_loss)

Максимальное значение должно быть 4, а результаты моей печати приведены ниже:

-6
4
-2
3
-2

Этот вопрос уникален, потому что я пытаюсь понять, почему функция возврата не нужна.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Это должно работать:

prices = [7, 1, 5, 3, 6, 4]
profit_loss = 0
for i in range(0, len(prices)-1):
    res = prices[i+1] - prices[i]
    if res > profit_loss:
        profit_loss = res
print(profit_loss)
0 голосов
/ 27 декабря 2018

Вы не можете return вне функции.На самом деле вам не нужно return здесь:

prices = [7,1,5,3,6,4]
profit_loss = -float('inf')

for i in range(len(prices)-1):
    change = prices[i+1] - prices[i]
    if change > profit_loss:
        profit_loss = change

print(profit_loss)  # 4

Более идиоматично, чем позиционное индексирование, используйте zip для итерации элементов prices попарно:

for i, j in zip(prices, prices[1:]):
    change = j - i
    if change > profit_loss:
        profit_loss = change

Более кратко, используйте max с пониманием генератора:

profit_loss = max(j - i for i, j in zip(prices, prices[1:]))  # 4

Или используйте функциональный эквивалент:

from operator import sub
profit_loss = max(map(sub, prices[1:], prices))  # 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...