查找列表的最小值、最大值和平均值

24

我很难弄清楚如何从一个列表中找到最小值。比如说:

somelist = [1,12,2,53,23,6,17]

如何通过定义(def)一个函数来查找此列表的最小值和最大值

我不想使用内置函数 min

5个回答

73
from __future__ import division

somelist =  [1,12,2,53,23,6,17] 
max_value = max(somelist)
min_value = min(somelist)
avg_value = 0 if len(somelist) == 0 else sum(somelist)/len(somelist)
如果您想手动找到函数的最小值:

somelist =  [1,12,2,53,23,6,17] 

def my_min_function(somelist):
    min_value = None
    for value in somelist:
        if not min_value:
            min_value = value
        elif value < min_value:
            min_value = value
    return min_value

Python 3.4引入了statistics包,该包提供了mean和其他额外的统计功能:

from statistics import mean, median

somelist =  [1,12,2,53,23,6,17]
avg_value = mean(somelist)
median_value = median(somelist)

3
我想指出平均值容易出现除以0的错误。 - rtpg
3
我认为最好的做法是让你自己思考并写下来。如果你理解上有问题,请提问。 - monkut
1
那么需要4次列表遍历才能获取所有这些值...在Python中难道不应该有一行代码来完成这个吗? - niken
1
在代码顶部加上 "from future import division'" 是为了什么? - Claudio
1
回到2014年,Python 2.7是常用的版本。从Python 2到3,除法运算符的功能发生了变化,使用from __future__ import division实际上导入了Python 3的除法运算符,覆盖了Python 2的运算符功能。 - monkut
显示剩余5条评论

5

返回元组中的最小值和最大值:

def side_values(num_list):
    results_list = sorted(num_list)
    return results_list[0], results_list[-1]


somelist = side_values([1,12,2,53,23,6,17])
print(somelist)

2
这是使用内置函数找到最小/最大值的最佳方法。排序的时间复杂度为O(nlogn),获取最小/最大值的时间复杂度为O(1)。 - Baldrickk
10
@Baldrick:实际上,min()和max()的时间复杂度是O(n),因此排序更慢。 - Hinni
2
@Hinni,在排序后,最小值在索引0处,最大值在索引length处(或者相反)。一旦排序完成,就不需要使用min()max()函数来查找这些值。 - Baldrickk

2

只有老师会让你做这样的傻事。你可以提供一个预期的答案,或者一个独特的解决方案,而班上其他人将会是(呵欠)相同的...

from operator import lt, gt
def ultimate (l,op,c=1,u=0):
    try:
        if op(l[c],l[u]): 
            u = c
        c += 1
        return ultimate(l,op,c,u)
    except IndexError:
        return l[u]
def minimum (l):
    return ultimate(l,lt)
def maximum (l):
    return ultimate(l,gt)

解决方案很简单。使用这个来使自己与显而易见的选择区分开来。

0
list=[]
n = int(input("Enter the length of your list: "))
for i in range (1,n+1):
    a=int(input("Enter the %d number: " %i ))
    list.append(a)
min=list[0]
max=list[0]
for i in range(1,n):
    if max<list[i]:
        max=list[i]
    if min>list[i]:
        min=list[i]
print(" %d is the biggest number " %max)
print(" %d is the smallest number " %min)

0
给定你的列表:somelist = [1,12,2,53,23,6,17],首先使用Pandas将其转换为数据框DataFrame。 然后你可以在数据框上使用describe()方法。
代码:
import pandas as pd
somelist = [1,12,2,53,23,6,17]
somelist_df = pd.DataFrame(somelist)
somelist_df.describe()

输出:

count   7.000000
mean    16.285714
std 18.052833
min 1.000000
25% 4.000000
50% 12.000000
75% 20.000000
max 53.000000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接