我正在努力制作一个中位数计划。这是我的代码。
def median(list=[]):
x = 0
list = sorted(list)
if len(list) % 2 == 0:
b = int((len(list)/2))
print b
c = int(len(list)/2)
x = [list[b-1],list[c]]
print x
x = float((x[0]+x[1])/2)
print str(x)
else:
print list[((len(list)//2))]
当我运行它时,我得到了这个
>>> median([1,2,3,4])
2
[2, 3]
2.0
发生了什么事?
请注意:我不想就如何更好地做到这一点提出任何建议,我只是想要帮助。
答案 0 :(得分:1)
Python 3.4有printf("x = %lf, y = %lf, e1 = %lf, e2 = %lf\n",ellcat[i][0],ellcat[i][1],ellcat[i][2],ellcat[i][3]);
以下是如何使用它的示例
statistics.median
如果您不使用python版本3.4,您可以随时使用我已包含的功能
import statistics
values = [1, 2, 3, 6, 8]
print(statistics.median(values))
虽然这些可能是更加pythonic的方式,如果你想要你的特定功能,你可以这样做
def median(lst):
lst = sorted(lst)
if len(lst) < 1:
return None
if len(lst) %2 == 1:
return lst[((len(lst)+1)/2)-1]
else:
return float(sum(lst[(len(lst)/2)-1:(len(lst)/2)+1]))/2.0
答案 1 :(得分:1)
试试这个,在分区上寻找2.0而不是2
def median(list=[]):
x = 0
list = sorted(list)
if len(list) % 2 == 0:
b = int((len(list)/2.0))
print b
c = int(len(list)/2.0)
x = [list[b-1],list[c]]
print x
x = float((x[0]+x[1])/2.0)
print str(x)
else:
print list[((len(list)//2))]
答案 2 :(得分:0)
在取平均值之前,您应该将x
的元素转换为浮点数:
def median(list=[]):
x = 0
list = sorted(list)
if len(list) % 2 == 0:
b = int(len(list)/2)
print b
c = int(len(list)/2)
x = [list[b-1],list[c]]
print x
x = (float(x[0])+float(x[1]))/2
print str(x)
else:
print list[((len(list)//2))]
median([1,2,3,4])
在原版中你有x = float((x[0]+x[1])/2)
。这样就可以添加2个整数并将它们分开。如果这是python 2,则会遇到整数除法问题(我不相信这会在python 3中发生,因为/
默认为浮点除法)。你可以通过明确地告诉python你的值是浮点数来解决这个问题(正如我上面所做的那样),或者你可以from __future__ import division
并且只使用python 3中的默认浮点除法。
此外,b
和c
都设置为相同的值,因此您无需单独存储它们。在计算列表b
c
或x