2015-11-30 26 views
1

我正在嘗試做一箇中位數程序。這是我的代碼。我如何讓我的中位程序開始工作(第2部分)

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

您是否正在使用Python 2? – soon

+0

我不確定。我使用Pythonista。有關係嗎? – Midataur

+0

我認爲Pythonista使用Python 2.7.4 – Midataur

回答

1

的Python 3.4擁有statistics.median

下面是如何使用它的一個例子

import statistics 

values = [1, 2, 3, 6, 8] 

print(statistics.median(values)) 

如果你不使用Python 3.4版本你可以總是對這樣一個我已經包括

功能
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 

,而這些可能是更Python的方式做到這一點,如果你想你的特異功能,你可以做這樣的

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.0))] 

median([1,2,3,4]) 
+0

我想寫我自己的功能。我不是要求如何做得更好,我問爲什麼我得到這個結果 – Midataur

+0

你需要使2在你的func漂浮 – Ryan

+0

我編輯我的文章相應 – Ryan

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))] 
0

你應該投的x元素爲float服用之前平均值:

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中,因爲/默認爲float division)。您可以通過明確告訴蟒蛇,你的值是浮動(如我上面那樣)解決這個問題,或者你可以from __future__ import division,只是使用默認的浮動師蟒蛇3.

此外,bc都被設置爲相同的值所以你不需要分開存儲它們。在計算您的清單時,只需使用bcx

相關問題