找一个序列中出现次数最多的元素

有两种方式可以找到,分别是Counter.most_common()和stats.mode()。都需要导入相应的模块包。

下面将分别介绍:
1、Counter.most_common()找出一个序列中出现次数最多的元素,Counter类目的是用来跟踪值出现的次数,它是就是一个无序的容器类型。以字典的键值对形式存储,元素作为key ,出现的次数作为value。
2、Scipy模块里面的stats.mode()函数寻找序列出现次数最的元素,如果多个成员出现的次数一样多,那么返回成员值最小的那个。

 #找稳定的值进行与学生上传的值比较,满足误差范围算对。
 from collections import Counter
 from scipy import stats
 #数值listMeteNopad可自行定义、float(answers_list[0][0])/2==7常量亦可自行定义。
 mode_list = [] #定义的列表。
 for itme in range(0, len(listMeteNopad) - 1): 
     #遍历我自己需要的稳定值范围(出现次数最多的数)
     if listMeteNopad[itme] > float(answers_list[0][0])/2: 
           #float(answers_list[0][0])/2这是一个常量,自己规定。
           mode_list.append(listMeteNopad[itme])
#输出两种情况找到的数。
print('listMeteNopad','\n',listMeteNopad)
print('55555555:',Counter(mode_list).most_common(1),round(stats.mode(mode_list)[0][0], 1))
listMeteNopad:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1657.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6, 7.0, 7.0, 7.0, 20.2, 73.0, 98.5, 98.5, 98.5, 105.1, 105.1, 104.3, 104.3, 104.3, 104.3, 104.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.5, 1.1, 3.2, 4.6, 4.6, 4.6, 6.0, 10.2, 11.2, 11.9, 11.9, 12.4, 12.7, 13.0, 13.0, 13.1, 13.1, 13.3, 13.5, 13.5, 13.5, 13.5, 13.5, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.5, 13.8, 13.8, 13.9, 14.0, 14.0, 14.1, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.3, 14.2, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.3, 14.3, 14.3, 14.2, 14.2, 14.2, 14.2, 14.2, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3]

55555555: 14.2 14.2

再看一个例子:

print('listMeteNopad','\n',listMeteNopad)

print('55555555:',Counter(listMeteNopad).most_common(3),
round(stats.mode(listMeteNopad)[0][0], 1))
listMeteNopad 
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1657.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6, 7.0, 7.0, 7.0, 20.2, 73.0, 98.5, 98.5, 98.5, 105.1, 105.1, 104.3, 104.3, 104.3, 104.3, 104.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.5, 1.1, 3.2, 4.6, 4.6, 4.6, 6.0, 10.2, 11.2, 11.9, 11.9, 12.4, 12.7, 13.0, 13.0, 13.1, 13.1, 13.3, 13.5, 13.5, 13.5, 13.5, 13.5, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.4, 13.5, 13.8, 13.8, 13.9, 14.0, 14.0, 14.1, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.3, 14.2, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.2, 14.3, 14.3, 14.3, 14.2, 14.2, 14.2, 14.2, 14.2, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3, 14.3]
 
55555555: [(0, 98), (14.3, 47), (14.2, 46)] 
 0.0

可以看出前者可以以键值对的形式返回多个值,后者确始终返回一个出现次数最多的数。前者适用于序列中稳定值不止一个的情况,需要结合循环去判断,找出自己需要的稳定值。自己可以选择喜欢的模块使用,希望此文对你(您)有帮助。

还望各位大佬多多指教!小生有理了!

你可能感兴趣的:(列表)