繁体   English   中英

使用带有 for 循环的字典来比较值

[英]Using dictionaries with for loops to compare values

我目前正在处理一项任务,我们正在阅读包含共享的文件,这些共享标有日期和共享值。 在赋值中,我们应该在所有函数中使用字典作为输入参数。

这是分享输入的一个小例子;

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 = 利润' 的位置,但我不会在这里这样做。

那么有没有办法只使用字典来做类似的事情呢?

这有点棘手,但我希望这可以解决您的问题。 请注意,您必须确保买入和卖出日期的时间顺序是合理的。 提供的代码构建了一个新的差异字典(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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM