2017-03-21 6 views
-1

コーディングとPythonには新しいが、私は本当に学びたい。試行すると、並べ替えられたリストから中央値を引き出す関数を作成します。私は、リストのインデックスが範囲外であるというエラーが発生し続ける。誰かが論理を理解しようとしている正しい方向に私を向けることができるので、私はよりプログラム的な方法で考えることができます。リストの索引がPython関数の範囲外にある

def median(n): 
     sorted(n) 
     ln = len(n) 
     even1 = n[ln/2] 
     even2 = n[ln /2 - 1] 
     odd = n[ln + 1/2] 
     middle = 0 
     if ln % 2 != 0: 
      middle = odd 
     else: 
      middle = (even1 + even2)/2.0 

     return middle 
+1

最初の行に 'sorted'の代わりに' sort'を使います。 'sorted'は' n 'のソートされたコピーを返すだけです – Jerfov2

+1

'ln/2'が奇妙な場合はどうなりますか? –

+0

'middle = 0'行は何ですか? – Jerfov2

答えて

2
odd = n[ln + 1/2] 

= lnln + 0に翻訳する... ln + (1/2)です。範囲外の要素n[ln]にアクセスしようとしています。

その行が

odd = n[(ln + 1)/2] 
+0

ありがとうございました。 –

0

重大なエラーが中間点を計算している必要があります。あなたは括弧を必要とする:

odd = n[(ln + 1)/2] 

あなたはまだいくつかのインデックスの問題を(ない1、Pythonのリストは0から始まることに注意してください)持っているが、それはあなたの「範囲外」の問題の原因です。奇数の中点問題を修正するには、1つの要素をバックアップする必要があります。

odd = n[(ln - 1)/2] 
+0

助けてくれてありがとう。私は変数の操作の順序を完全に忘れていました。また、奇数変数については、0から数えていないので、長さに1を加える必要はありませんでした –

関連する問題