Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带有for循环的字典比较值_Python_Python 3.x_List_Dictionary - Fatal编程技术网

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

Python 使用带有for循环的字典比较值,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我目前正在处理一项任务,我们正在阅读包含股票的文件,股票上印有日期和股票价值。在作业中,我们应该在所有函数中使用字典作为参数 下面是一个共享输入的小示例 2000-01-2667987 2000-01-27,3.673608 2000-01-283.393913 我们的目标是找到两个日期是买入和卖出股票让你获得最大利润,两个日期是买入和卖出让你损失最大。我已经制作了一个包含日期和共享值对的字典,现在我只需要将它们相互比较。字典的顺序如下:{share value:date} 目前我已经设法解决了

我目前正在处理一项任务,我们正在阅读包含股票的文件,股票上印有日期和股票价值。在作业中,我们应该在所有函数中使用字典作为参数

下面是一个共享输入的小示例

2000-01-2667987

2000-01-27,3.673608

2000-01-283.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=proit”的位置,但我不会在这里这样做


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

这有点棘手,但我希望这能解决你的问题。请注意,您必须确保买卖日期的时间顺序是合理的。提供的代码构建了一个新的差异字典
(key=diff&vals=sell\u date-buy\u date)
,然后您只需找到最大利润的最大值和最大损失的最小值

从datetime导入datetime作为dt
股份={150:'2000-01-01',10:'2000-07-01',120:'2000-05-01',200:'2000-09-01',50:'2000-08-01'}
diff_values=[i-j表示共享中的i.keys()表示共享中的j.keys()
如果dt.strptime(共享[j],%Y-%m-%d”)
你能提供一个输入的小例子吗?@SuperKogito当然!2000-01-26,3.67987 2000-01-27,3.673608 2000-01-28,3.393913我想,在我的回答中,我使用了足够接近的输入,看看它。这应该有帮助;)谢谢我试过了,它确实有效,解决了我们的任务。然而,我相信使用datetime导入和相应的函数是我们迄今为止所学到的。但我会尝试实现这段代码,看看它是否足够!很高兴这有帮助。您总是可以构建一个简单的函数来进行日期比较,而不是使用
datetime
。碰巧我们的共享输入已经在.txt文件中排序,也许我可以绕过使用日期导入?问题是日期比较过滤掉无效的日期组合。在这段代码中,您仍然可以使用相同的逻辑,但是您必须使用'shares.keys()'的索引。我认为这三行应该改为:
keys=list(shares.keys());diff_值=[keys[i]-范围内i的keys[j](0,len(keys))范围内j的keys[j](i,len(keys))
并且以类似的方式,您需要更改
diff_日期