如何对Python统计模式函数进行错误检查?

1 投票
4 回答
11702 浏览
提问于 2025-04-18 15:50

这里有一个类似的问题,但并不完全符合我的情况。我正在使用Python 3.4,想用统计模块里的众数(mode)函数。不过当没有众数的时候,Python就会终止程序并报错。我想知道有没有办法用一个if语句来检查我的列表里是否有重复的元素,如果没有的话,在调用众数函数之前显示一条提示信息,并阻止众数函数的运行?
到目前为止,我写了:

    UserNumbers=input("Enter number sequence separated by spaces: ")
    nums = [int(i) for i in UserNumbers.split()]
    Average = mean(nums)
    print ("The mean is ", Average)
    Middle = median(nums)
    print ("The median is ", Middle)
    Most = mode(nums)
    print ("The mode is ", Most)

我还是个初学者,所以有点难以准确表达我的问题,请原谅我用词不当。

4 个回答

1

如果有多个项目被重复了相同的次数,那么用 len(set(list)) != len(list) 这个检查方法就不够用了。

4

在Python编程中,有一种常见的风格,就是“请原谅我,而不是请求许可”。这意味着在编写代码时,遇到问题时更容易处理错误,而不是事先检查是否会出错。你可以使用一个叫做 try-except 的结构来处理这些情况:

from statistics import mode, StatisticsError

try:
  print("The mode is " + mode(nums))
except StatisticsError:
  print("There is no mode!")

还有一些其他的注意事项:

  • 在Python中,通常使用 snake_case(下划线命名法)来命名变量,而不是 camelCase(驼峰命名法)。不过,类的命名通常使用 PascalCase(每个单词的首字母大写)。
  • 就像在Java和其他语言中一样,变量通常是 小写 的,而类名则是 大写 的。
4

根据文档如果数据是空的,或者没有一个最常见的值,就会出现StatisticsError错误。所以,列表里有重复的值并不能保证一定会有众数。

一个更好的解决办法是使用异常处理机制,比如:

nums = [1,2,3,4,5,5,6,7,7,8,9]
try:
    m = mode(nums)
except StatisticsError:
    print ("No unique mode found")
3

用集合来检查:

if len(set(nums)) == len(nums) 

如果你的列表里有重复的东西,那么集合的长度会比你的列表短。

if len(set(nums)) != len(nums): # check different lengths, if different we have dups 
    print ("The mode is ", Most)
    Most = mode(nums)
else:      # else both are the  same size so no dups, just print 
    print("No duplicates in nums") 

集合里不能有重复的项目:

In [1]: nums =[1,2,3,4,1]

In [2]: nums
Out[2]: [1, 2, 3, 4, 1]

In [3]: set(nums)
Out[3]: {1, 2, 3, 4} # sets cannot have duplicate items

In [4]: len(set(nums)) == len(nums) # set = len 4, nums = len 5
Out[4]: False

撰写回答