1.分析思路
首先,应统计数字列表中每个数字出现的次数;其次,对每个数字出现的次数进行排序;最后选取出现次数最多的数字即为该数字列表的众数。
2.代码实现
import operator
def seekingMode(numList): # 列表1:numList;列表2:uniqueList(列表1去重后得到的列表)。
uniqueList=list(set(numList)) # 先将列表1转换成集合除去重复值,再将其还原为列表。
frequencyDict={} # 定义一个空字典,用于存储列表1中的数字(key)及其出现的次数(value)。
for num in uniqueList:
frequency=numList.count(num) # 统计某一数字在列表1中出现的次数。
frequencyDict[num]=frequencyDict.get(num,0)+frequency # 将数字及其出现次数存储在字典中。
sortedDict=sorted(frequencyDict.items(),key=operator.itemgetter(1),reverse=True) # 对列表1中数字出现的次数进行排序(降序)。
maxFrequency=sortedDict[0][1] # 获得列表1中数字出现的最大次数。
keys=[key for key,value in frequencyDict.items() if value==maxFrequency] # 根据value(列表1中数字出现的最大次数)获取字典中所有该取值的key。
keys.sort() # 排序(升序)
return keys
#函数测试
list1=[1,2,3,8,1,2,0,32,1,6,3,32,32,45,45,45,32.1,32.1,32.1,98.2,98.2,98.2]
mode=seekingMode(list1)
print(mode)
3.测试结果