我正在尝试计算整数列表的均值,中位数和众数。但是,我得到的错误(根据我的理解)指出我无法返回浮点答案。我不明白为什么列表会出现这种情况。我正在做的是对均值和中位数进行基本的算术运算(使用用于模式的统计框架)。输出应该只是一个答案。
这是我的代码:
from statistics import mode
listOfNumbers = [1, 2, 6, 7, 8, 9, 3, 4, 5, 10, 10]
listOfNumbers.sort()
length = len(listOfNumbers)
def median(numbers):
if((len(list)) % 2 == 0):
median = (listOfNumbers[(length)/2] + listOfNumbers[(length)/2-1]) / 2
else:
median = listOfNumbers[(length-1)/2]
return
def meanMedianMode(numbers):
# TODO your code here!
meanOfNumbers = (sum(numbers))/(len(numbers))
medianOfNumbers = median(numbers)
modeOfNumbers = mode(numbers)
print("The mean of the numbers is: " + str(meanOfNumbers))
print("The median of the numbers is: " + str(medianOfNumbers))
print("The mode of the numbers is: " + str(modeOfNumbers))
meanMedianMode(listOfNumbers)
这是我的输出:
TypeError Traceback (most recent call last)
<ipython-input-27-03d94981e27d> in <module>()
21 print("The mode of the numbers is: " + str(modeOfNumbers))
22
---> 23 meanMedianMode(listOfNumbers)
24
<ipython-input-27-03d94981e27d> in meanMedianMode(numbers)
15 # TODO your code here!
16 meanOfNumbers = (sum(numbers))/(len(numbers))
---> 17 medianOfNumbers = median(numbers)
18 modeOfNumbers = mode(numbers)
19 print("The mean of the numbers is: " + str(meanOfNumbers))
<ipython-input-27-03d94981e27d> in median(numbers)
9 median = (listOfNumbers[(length)/2] + listOfNumbers[(length)/2-1]) / 2
10 else:
---> 11 median = listOfNumbers[(length-1)/2]
12 return
13
TypeError: list indices must be integers or slices, not float
答案 0 :(得分:0)
问题出在这一行:
median = listOfNumbers[(length-1)/2]
在python 3中,(length-1)/2
是float
,而不是int
,因此错误list indices must be integers or slices, not float
最简单的解决方法是将结果投射回int
:
...
median = listOfNumbers[int((length - 1) / 2)]
...
实际上,我将像这样重构整个median()
函数,因为您要混合使用局部变量和全局变量,而不返回任何内容:
def median(numbers):
length = len(numbers)
if length % 2 == 0:
return (listOfNumbers[int(length / 2)] + listOfNumbers[int(length / 2) - 1]) / 2
else:
return listOfNumbers[int((length - 1) / 2)]
答案 1 :(得分:0)
好的解决方法:
median_value = numbers[int((length - 1 )/2)]
return median_value
这里有几件事...
numbers [x]表示数字中的第x个元素,因此5.5之类的值不会指向任何东西。
6.0仍然是一个十进制数字(或浮点数),我们需要一个整数,因此请使用int()使其现在为6。
理想情况下,您希望中值函数在列表通过后返回这些值(因此返回中值)
您还必须对if语句的另一部分做同样的事情(在此运行中不执行)。
median_value = (numbers[int((length - 1)/2))] + numbers[int((length + 1)/2)]) / 2
return median_value