如何对Python统计模式函数进行错误检查?
这里有一个类似的问题,但并不完全符合我的情况。我正在使用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