【问题标题】:Find min, max, and average of a list查找列表的最小值、最大值和平均值
【发布时间】:2015-01-16 12:32:48
【问题描述】:

我很难弄清楚如何从列表中找到最小值 例如

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

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

我不想使用内置函数min

【问题讨论】:

    标签: python list max min


    【解决方案1】:
    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)
    

    【讨论】:

    • 希望指出,该平均值容易被 0 错误除。
    • 是的,但我想在数组列表中找到类似的东西。我的意思是为 min = array[0] 设置然后,对于数组中的 i,如果 i =
    • 我不确定你想要什么。要最小值的索引吗?
    • 我认为最好自己弄清楚并编写。如果您有理解问题,请询问。
    • 所以 4 x 列表遍历来获取所有这些值......在 python 中不应该有一个用于这些东西的衬里吗?
    【解决方案2】:

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

    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)
    

    【讨论】:

    • 这是使用内置函数查找最小值/最大值的最佳方法。排序是 O(nlogn),得到 min/max 是 O(1)
    • @Baldrick:实际上,min() 和 max() 是 O(n)。所以,排序比较慢。
    • @Hinni 排序后,最小值位于索引 0,最大值位于索引 length(反之亦然)。排序后,无需使用min() 或max() 来查找这些值。
    【解决方案3】:

    只有老师才会要求你做这种傻事。 您可以提供预期的答案。或者一个独特的解决方案,而班上的其他人会(打哈欠)一样......

    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)
    

    解决方案很简单。用它来让自己远离显而易见的选择。

    【讨论】:

      【解决方案4】:
      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)
      

      【讨论】:

        【解决方案5】:

        鉴于您的列表:somelist = [1,12,2,53,23,6,17],首先,使用 Pandas 将其设为 DataFrame。 然后就可以在DF上使用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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-29
          • 2014-06-11
          • 2017-07-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多