2017-04-26 16 views
1

誰も私に説明してくださいなぜこれが動作していない?私が得ているエラーメッセージは次のとおりです。TypeError:リストインデックスは浮動小数点ではなく、整数またはスライスでなければなりません。Python中央値関数エラーを見つける

def median(lst): 
    s = sorted(lst) 
    l = len(lst)/2 
    if len(lst) % 2 == 0: 
     print((s[l] + s[l-1])/2.0) 
    else: 
     print(s[l]) 
median([3,3,5,6,7,8,1]) 
+1

を使用してintlを変換します。したがって、lは整数になります。 – FLab

+1

'len(lst)'を2で割って浮動小数点数を返します。代わりに整数除算を使うことができます( '//')。 – L3viathan

答えて

0

エラーが浮動小数点値、すなわち実際の除算を返し/演算子を使用して分割l

を計算している間の整数、すなわち//戻るだけ商

したがって

lを次のように計算する必要があります。 WS

l = len(lst) // 2 

またはウェル...リストインデックスが浮いていない、整数またはスライスでなければなりません

l = int(l) 
+0

有用であれば私の答えをupvotingしてください – Ani

0

len(lst)が奇数である場合、lフロートなります。

興味深いことに、あなたが書いたコードは、分子と分母の両方が整数の場合、整数除算を使用するため、おそらくPython 2で有効です。

しかし、Python 3では、デフォルトで真の除算が使用されます。

詳細は、参照してください:あなたがなさIn Python 2, what is the difference between '/' and '//' when used for division?https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator

関連する問題