列表[1,1,2,2,4,5]
的示例模式为1和2.
如果我在python中的statistics包中使用mode函数,我会收到错误消息,说明没有唯一模式。
但我希望打印较低模式,即“1”。
感谢您的回答。
答案 0 :(得分:1)
希望这会有所帮助。 修改:使modes
成为生成器而不是列表。感谢@codykochmann的评论
from collections import Counter
nums = [7, 2, 2, 1, 1, 4, 5, 6]
c = Counter(nums) # count numbers
max_number_count = c.most_common(1)[0][1]
modes = (item for item, count in c.items() if count == max_number_count)
min_mode = min(modes)
添加更多号码:
更新以前的计数器很容易。假设新号码为nums_2
,您可以使用c.update(nums_2)
更新计数器c
,然后找到新的最低模式。感谢@Gautham Velchuru的回答。
答案 1 :(得分:1)
Scipy's mode正是如此:
j
然后from scipy.stats import mode
m, c = mode([1, 1, 2, 2, 4, 5])
是最低模式(1),m
是其频率(2)。
答案 2 :(得分:0)
您可以随时自行滚动 - 如果列表已排序,您可以保持运行模式,只有在出现更多事件的新值时才更新它。
答案 3 :(得分:0)
简单但效率低下;
nums = [0,1,1]
nums = sorted([(x, -nums.count(x)) for x in set(nums)], key=lambda tup: tup[0])
nums.sort(key=lambda tup: tup[1])
print(nums[0][0])
使用val存储元组列表并对其进行排序和排序。由于排序最小到最大,因此可以将计数乘以-1。
答案 4 :(得分:0)
我认为这是一个排序的谜题,但后来意识到我们只关心获得最小的模式,所以跳过任何索引或元组排序,以保持记忆和速度快乐。
from collections import Counter
nums = [7, 2, 2, 1, 1, 4, 5, 6]
c = Counter(nums)
max_count = max(c.values())
print(min(k for k,v in c.items() if v==max_count))