我目前正在从事一项作业,我们正在读取包含份额的文件,这些份额带有日期和份额值。在作业中,我们应该在所有函数中都将字典用作参数。
这是分享输入的一个小例子;
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 =利润”的头寸,但是在这里我不会这样做。
那么有什么方法可以只使用字典来做类似的事情吗?
答案 0 :(得分:1)
这有点棘手,但是我希望这可以解决您的问题。请注意,您必须确保购买日期的时间顺序合理。所提供的代码建立了一个新的差异字典(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())