使用循环在Python中找最小值

1 投票
8 回答
19845 浏览
提问于 2025-04-17 08:07

我可以找到最大值,也可以找到平均值,但就是找不到最小值。我知道在循环中有办法找到最大值和最小值,但现在我只会找到最大值。

def large(s)
    sum=0
    n=0
    for number in s:
        if number>n:
            n=number 
    return n 

有没有办法用这个函数找到最小值呢?

8 个回答

2

找最小值的方法和找最大值的方法是一样的,只不过比较的方向反过来了。也就是说,<变成>,反之亦然。开始的时候,可以把最小值设为一个很大的数,比如float("inf"),或者直接设为列表中的第一个元素。

顺便提一下,Python有一个内置的min函数可以用来做这个。

2

你需要把n设置成一个很大的数字(比你预期的任何数字都要大),或者从列表中选一个数字来开始比较:

def large(s)
    n = s.pop()
    for number in s:
        if number < n:
            n = number 
    return n 

显然,你已经有了最大值和最小值来达到这个目的。

3

你可以使用Python自带的 sum()min()max() 函数来进行这种分析。

不过,如果你想一次性完成所有操作,或者只是想学会自己怎么写,那么这个过程可以分为两步:1)遍历输入的数据,2)记录当前的总和、到目前为止的最小值和最大值:

def stats(iterable):
    '''Return a tuple of the minimum, average, and maximum values

        >>> stats([20, 50, 30, 40])
        (20, 35.0, 50)

    '''
    it = iter(iterable)
    first = next(it)     # Raises an exception if the input is empty
    minimum = maximum = cumsum = first
    n = 1
    for x in it:
        n += 1
        cumsum += x
        if x < minimum:
            minimum = x
        if x > maximum:
            maximum = x
    average = cumsum / float(n)
    return minimum, average, maximum

if __name__ == '__main__':
    import doctest
    print doctest.testmod()

这段代码还有一个小细节。它使用输入数据中的第一个值作为最小值、最大值和总和的起始值。这种做法比用正无穷或负无穷作为初始值要好。顺便提一下,Python自带的函数也是这样写的。

撰写回答