如何从for循环中找到最小值?

时间:2017-06-09 16:35:53

标签: python for-loop math min

import sys
trig = []
base, area = input().strip().split(' ')
base, area = [int(base), int(area)]
for i in range(1,area+1):
    form = abs(((base*i)/2)-area)
    trig.append(form)

for i in range(1,area+1):
    form = abs(((base*i)/2)-area)
    if form == min(trig):
        print(i)

我试图从第一个for循环中找到最小值,但我想避免使用列表,因为我希望程序运行得更快。如何在不使用列表的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

我会继续尝试根据您的代码猜测您想要的内容 - 这实际上只保留一个变量并检查每个循环的最小值(并根据需要进行相应更新):

base, area = input().strip().split()
base, area = int(base), int(area)

min_pos = 1
min_trig = abs(base / 2 - area)  # calculate the first immediately
for i in range(2, area + 1):  # loop from the second...
    form = abs((base * i) / 2 - area)
    if form < min_trig:
        min_pos = i
        min_trig = form

print(min_pos)

<强>更新

如评论中所述,上述内容仅针对单个最小值找到索引,因此只有在有一个最小值时才会正确。如果您需要最低限度列表,您可以执行以下操作:

base, area = input().strip().split()
base, area = int(base), int(area)

min_pos = [1]  # initialize the first index as a minimum immediately
min_trig = abs(base / 2 - area)  # calculate the first trig as a minimum immediately
for i in range(2, area + 1):  # loop from the second...
    trig = abs((base * i) / 2 - area)
    if trig == min_trig:
        min_pos.append(i)
    elif trig < min_trig:
        min_pos = [i]
        min_trig = trig

print(min_pos)  # prints you a list of all minimum positions

这样您就不必将所有内容存储在单独的列表中,也不需要进行双循环。纯O(N)溶液。

答案 1 :(得分:-1)

根据您的代码现在所做的事情,我创建了您的细分市场的另一个版本,基本上做同样的事情。我用输入字符串"5 16"测试了它,它似乎正在工作。我使用的代码如下:

import sys
trig = []
base, area = input().strip().split(' ')
base, area = [int(base), int(area)]
minTrig = (base * area) / 2 # set an upperbound on minTrig so that the max value in the trig array will be less than this value.
for i in range(1,area+1):
    form = abs(((base * i) / 2) - area)
    trig.append(form)
    minTrig = min(minTrig, form)
indices = [i + 1 for i, x in enumerate(trig) if x == minTrig]
print(indices)

这使用列表推导来创建一个包含最小数量的所有索引的新数组。

可以找到用于查找所有最小值元素的代码here

当我使用"5 16"测试我的代码时,输​​出为[6, 7]