#mode of numbers
number_counts = {}
for number in numbers:
if number in number_counts:
number_counts[number] += 1
else:
number_counts[number] = 1
max_count=0
for number in number_counts:
if number_counts[number] > max_count:
max_count = number_counts[number]
print('Mode: ', number)
#allkeys = ''
#if number_counts[number] == max_count:
#allnumbers = allnumbers +" "+str(number)+","
#print('Mode: ', [allnumbers])
以下是我要修复的代码部分。我试图找到一个数字列表的模式(在我的程序中早先编码为数字)。我有它给我一种模式,但不是全部。我根据其他帖子评论了我认为可能在正确的轨道上。
答案 0 :(得分:1)
只有在max_count
的值发生变化时,您的程序才会将数字打印为模式,只有在找到较大计数的键时才会发生这种情况。如果遇到具有相同计数的键,则会忽略它,并且您永远不会看到它打印出来。这是由于if number_counts[number] > max_count:
行 - 它应该是if number_counts[number] >= max_count:
。
但是,您的例程还有另一个问题:它在确定模式之前打印可能的模式 - 如果到目前为止具有最大计数,则打印一个数字,而不是最大计数总数。
因此,将尝试打印模式的最后一部分更改为两个部分(代码以max_count=0
开头)。第一部分找到max_count
的值,但在第一部分完成之前无法确定它是什么。然后第二部分找到具有该计数的所有数字并打印它们。
顺便说一句,第一部分可以只用一行完成:
max_count = max(number_counts.values())
还有其他方法可以找到这些模式,但这对你来说似乎是一种练习。
答案 1 :(得分:0)
如果你只想尝试一种模式,那就相当容易了。
from collections import Counter
A = [0, 1, 2, 3, 4, 1, 1]
counts = Counter(A)
(mode, count) = counts.most_common(1)[0]
如果你真的想要映射一个值的字典,你可能会做类似的事情。
from collections import defaultdict
counts = {
0: 1,
1: 1,
2: 3,
3: 1,
}
results = defaultdict(list)
for (number, value) in counts.items():
results[value].append(number)