首页 > 解决方案 > 如何在while中使用for循环编写代码?

问题描述

我想返回差异最大的两个索引,而最小值在最大值的左侧。这是我的代码:

def get_buy_sell_dates(price_list):
   min = 0
   max = -1
   while min < (max + len(price_list)):
       for i in range(1, len(price_list)-1):
           if price_list[min] > price_list[i]:
               min = i
           if price_list[max] < price_list[-i-1]:
               max = -i-1
   return (min,max + len(price_list))

但是对于[7,10,1,3,6,4]它返回的列表(2, 1)而不是 (2, 4)

标签: pythonindexingwhile-loop

解决方案


使用两个嵌套的 for 循环。对于列表中的每个值,您将遍历右侧的值。您可以通过跳过下一个值较低/较大的值来使其更快。显然,如果紧跟在您检查的最小值之后的值低于您正在检查的值,则不需要检查当前值。最大值也反过来。我确信您可以添加许多其他优化。

def get_buy_sell_dates(price_list):
    max_diff = 0
    max_diff_min = 0
    max_diff_max = -1
    for i in range(len(price_list)):
        ix = min(len(price_list) - 1, i + 1)
        if price_list[ix] >= price_list[i]:
            for n in range(ix, len(price_list)):
                nx = min(len(price_list) - 1, n + 1)
                if price_list[n] >= price_list[nx]:
                    diff = price_list[n] - price_list[i]
                    if diff > max_diff:
                        max_diff = diff
                        max_diff_min = i
                        max_diff_max = n
    if max_diff > 0:
        return (max_diff_min, max_diff_max)
    else:
        return None

推荐阅读