博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python众数,平均数,中位数实现代码(包括字典的使用)
阅读量:3810 次
发布时间:2019-05-22

本文共 3502 字,大约阅读时间需要 11 分钟。

不使用numpy,用python实现判断一个列表中众数中位数和平均数

题目:

统计学家想要用一组函数巨酸一列数字的中位数和众数,中位数是将一个列表排序后出现在中间位置的数。众数是在列表中出现最频繁的数。在一个模块中定义这些函数。还要包含一个名为mean的函数,它计算一组数字的平均数。每个函数都接受数字的一个列表作为参数,并且返回一个单个的数字。

思路:

定义一个类,然后分别写一个排序函数,计算平均数的函数,计算中位数的函数,计算众数的函数。

排序:

用冒泡排序;

def sorting(self, list=[]):        for i in range(len(list)):            for j in range(len(list) - 1 - i):                if list[j] > list[j + 1]:                    list[j], list[j + 1] = list[j + 1], list[j]        return list

中位数:

当列表传入后初始化执行,排序函数,得到一个从小到大排序的列表,因此中位数是label处于中间的数值。列表的长度始终为整数,需要考虑奇偶的特性。

def median(self,list = []):        n = len(list)        if (n% 2) == 0:            local = int(n/2)            # 除法后数据类型为float        else:            local = int((n+1)/2)        return list[local]

平均数:

就列表全部加和,除以列表的长度

def mean(self,list = []):        sum = 0        for i in range(len(list)):            sum += list[i]        means = sum/len(list)        return means

众数:

不使用numpy的api实现找众数。
主要的思路是遍历列表中的元素,查每一个元素的出现次数,创造一个字典,字典内容分别是元素和元素对应出现的次数。
使用max函数查找value中最大的值。
但是可能列表中存在两个元素出现次数相同且都为最大的情况,这种情况下应该将几个元素都筛选出来,而直接使用max函数和对应的key-value查找只能查找出其中遍历过程中最先出现的内容。因此遍历字典找到每一个出现次数最多的元素。

def mode(self,lists = []):        dic = {
} k = 1 for i in range(len(lists)): for j in range(len(lists)): if lists[j] == lists[j-1]: k += 1 else: dic[lists[j-1]] = k k = 1 value = max(dic.values()) max_list = [] for m, n in dic.items(): # 遍历字典一遍找对应的 key 值 print(m,n) if n == value: max_list.append(m) return value,max_list

全部代码

class Calculate(object):    def __init__(self,lists = []):        self.sorting(lists)    def sorting(self, list=[]):        for i in range(len(list)):            for j in range(len(list) - 1 - i):                if list[j] > list[j + 1]:                    list[j], list[j + 1] = list[j + 1], list[j]        return list    nums = 0    def median(self,list = []):        n = len(list)        if (n% 2) == 0:            local = int(n/2)        else:            local = int((n+1)/2)        return list[local]    def mean(self,list = []):        sum = 0        for i in range(len(list)):            sum += list[i]        means = sum/len(list)        return means    def mode(self,lists = []):        dic = {
} k = 1 for i in range(len(lists)): for j in range(len(lists)): if lists[j] == lists[j-1]: k += 1 else: dic[lists[j-1]] = k k = 1 print(dic) value = max(dic.values()) max_list = [] for m, n in dic.items(): # 遍历字典一遍找对应的 key 值 print(m,n) if n == value: max_list.append(m) return value,max_list

测试代码1:

s = Calculate()lists = [0,1,2,5,6,9,7,8,6,3,1,1,4,2,2,7,8,9,5,6,8,6,4,9,9,9,9,9,6,6,6]new_list = s.sorting(lists)print(new_list)means = s.mean(lists)print(means)medians = s.median(lists)print(medians)modes = s.mode(lists)print(modes)

结果1:

[0, 1, 1, 1, 2, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9]5.5806451612903236(7, [9, 6])

测试代码2:

s = Calculate()lists = [1,5,6,8,8,8,7,7,7,9,9,9,4,4,0,0,5,5,4]new_list = s.sorting(lists)print(new_list)means = s.mean(lists)print(means)medians = s.median(lists)print(medians)modes = s.mode(lists)print(modes)

结果2:

[0, 0, 1, 4, 4, 4, 5, 5, 5, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9]5.5789473684210527(3, [9, 4, 5, 7, 8])

转载地址:http://aaaxn.baihongyu.com/

你可能感兴趣的文章
Xcode开发技巧之Code Snippets Library
查看>>
如何使用iOS 8的虚化效果(Swift版本)
查看>>
git多账户使用及配置
查看>>
LeetCode 179. 最大数 [java实现]
查看>>
数据结构 第2讲 算法复杂性
查看>>
数据结构 第15讲 一场说走就走的旅行——最短路径
查看>>
数据结构 第4讲 单链表
查看>>
切呀切披萨——最优三角剖分
查看>>
参加话题活动送算法入门畅销书《趣学算法》(话题已结束,书已经全部送出,中奖者请注意查收!)
查看>>
数据结构 第12讲 二叉树的层次遍历
查看>>
数据结构 第14讲 神秘电报密码——哈夫曼编码
查看>>
分治法时间复杂度求解秘籍
查看>>
《趣学算法》测试数据及在线测试系统发布!
查看>>
计算机科学与技术学习心得之专谈计算机系统的学习(转载)
查看>>
计算机科学与技术学习心得之谈谈学习态度的问题(转载)
查看>>
OpenGL的一个小经验
查看>>
拉丁方阵
查看>>
字符串中特定单词逆序
查看>>
算式计算
查看>>
解析__cdecl,__fastcall, __stdcall 的不同
查看>>