Использование словарей с циклами for для сравнения значений - PullRequest
2 голосов
/ 14 апреля 2019

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

Вот небольшой пример ввода общего ресурса;

2000-01-26, 3.67987

2000-01-27, 3.673608

2000-01-28, 3.393913

Цель состоит в том, чтобы найти две даты, когда покупка и продажа акций приносила вам наибольшую прибыль, а две даты, когда покупка и продажа приносили вам наибольшую прибыль. Я сделал словарь, содержащий пары дат и общие значения, теперь мне просто нужно сравнить их друг с другом. Словарь упорядочен следующим образом: {share value: date}

В настоящее время мне удалось решить эту проблему, поместив все значения общего ресурса в список, где я мог бы легче сравнивать их друг с другом, поскольку они проиндексированы. Затем я использую положение, чтобы снова найти значение доли, а затем использую его, чтобы найти значение соответствующего ключа в словаре.

Однако это решение неправильно использует словарь в качестве параметра, поэтому я считаю, что оно не удовлетворит моего профессора.

def calc_max_profit():
   value = 0
   profit = 0
   max_profit = 0
   for x in range(0, len(share_list)):
       value = share_list[x]

       for y in range(x+1, len(share_list)):
           profit = share_list[y] - value

           if profit > max_profit:
               max_profit = profit

Это в основном то, как я вычислял максимальную прибыль, в операторе if мне просто нужно сохранить позицию последнего произошедшего 'max_proft = profit', но я не буду этого делать здесь.

Так есть ли способ сделать подобное, используя только словари?

1 Ответ

1 голос
/ 14 апреля 2019

Это было немного сложно, но я надеюсь, что это решит вашу проблему.Обратите внимание, что вы должны убедиться, что хронологический порядок дат покупки и продажи имеет смысл.Приведенный код создает новый словарь различий (keys=diffs & vals=sell_date-buy_date), тогда вы просто найдете максимальное значение для максимальной прибыли и минимальное для максимальной прибыли.

from datetime import datetime as dt

shares = {150:'2000-01-01', 10:'2000-07-01', 120:'2000-05-01', 200:'2000-09-01', 50:'2000-08-01'}
diff_values = [i-j for i in shares.keys() for j in shares.keys() 
               if dt.strptime(shares[j], "%Y-%m-%d") <  dt.strptime(shares[i], "%Y-%m-%d") ]

diff_dates  = [[shares[j], shares[i]] for i in shares.keys() for j in shares.keys()
               if dt.strptime(shares[j], "%Y-%m-%d") <  dt.strptime(shares[i], "%Y-%m-%d")]
diffs_dict  = dict(zip(diff_values, diff_dates))

max_diff = max(diffs_dict.keys())
min_diff = min(diffs_dict.keys())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...