[英]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.