众数,一组数字中出现频率最多的数。
使用 c 指代 Counter 对象
most_common() 返回一个列表,每个成员都是一个元组。
每个元组中的第一个元素是最频繁出现的数字,第二个元素是出现的次数。
from collections import Counter
def calculate_mode(numbers):
c = Counter(numbers)
# 参数为返回的元组个数,1 表示返回一个,2 表示返回两个,按频数高到低顺序返回
mode = c.most_common(1)
return mode[0][0]
if __name__ == '__main__':
scores = [7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10]
mode = calculate_mode(scores)
print('The mode of the list of numbers is: {0}'.format(mode))
出现多个相同个数的众数时:
from collections import Counter
def calculate_mode(numbers):
c = Counter(numbers)
numbers_freg = c.most_common()
max_count = numbers_freg[0][1]
modes = []
for num in numbers_freg:
if num[1] == max_count:
modes.append(num[0])
return modes
if __name__ == '__main__':
scores = [7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10, 5, 5, 5]
modes = calculate_mode(scores)
print('The mode(s) of the list of numbers are: ')
for mode in modes:
print(mode)
创建频数表:
按出现次数从高到低排序
from collections import Counter
def frequency_table(numbers):
table = Counter(numbers)
print('Number\tFrequency')
for number in table.most_common():
print('{0}\t{1}'.format(number[0], number[1]))
if __name__ == '__main__':
scores = [7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10, 5, 5, 5]
frequency_table(scores)
按列表元素从大到小排列
from collections import Counter
def frequency_table(numbers):
table = Counter(numbers)
numbers_freq = table.most_common()
numbers_freq.sort()
print('Number\tFrequency')
for number in numbers_freq:
print('{0}\t{1}'.format(number[0], number[1]))
if __name__ == '__main__':
scores = [7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10, 5, 5, 5]
frequency_table(scores)