2016-10-18 3 views
0

私はいくつかの整数に対して実行中の中央値を取得しようとしています。たとえば、6つの要素が1つずつ順番に来るとします。各入力の実行中の中央値がそれぞれ12,8,5,4,5,6,5である12,4,5,3,8,7としましょう。私はPythonのコードを書いたが、それは間違った答えを与えるようだ。ヘルプは高く評価されます。実行中の中央値を取得する際にエラーが発生しました

n = int(raw_input().strip()) 
s=[] 
for i in xrange(n): 
    a=int(raw_input()) 
    if len(s)==0: 
     s.append(a) 
     print "%.1f" % a 
    else: 
     for j in xrange(len(s)): 
      if a<s[j]: 
       s.insert(j,a) 
     if a>=s[-1]: 
      s.append(a) 
     if len(s)%2==0: 
      print "%.1f" % float((s[len(s)/2] + s[len(s)/2 -1])/2.0) 
     else: 
      print "%.1f" % s[len(s)/2] 

答えて

1

以下のコードに埋め込まれたコメントを読む -

n = int(raw_input().strip()) 
s=[] 
for i in xrange(n): 
    a=int(raw_input()) 
    if len(s)==0: 
     s.append(a) 
     print "%.1f" % a 
    else: 
     for j in xrange(len(s)): 
      if a<s[j]: 
       s.insert(j,a) 
       break # break after insertion to avoid multiple insertions 
     else: # Read https://docs.python.org/3/reference/compound_stmts.html#for 
      s.append(a) 

     if len(s)%2==0: 
      print "%.1f" % float((s[len(s)/2] + s[len(s)/2 -1])/2.0) 
     else: 
      print "%.1f" % s[len(s)/2] 

同じことをやってのよりPython的(原文のまま)方法 -

import bisect 

n = int(raw_input().strip()) 
s=[] 
for i in xrange(n): 
    a=int(raw_input()) 

    bisect.insort_left(s, a) 

    quotient, remainder = divmod(len(s), 2) 
    if remainder: 
     print "%.1f" % s[quotient] 
    else: 
     print "%.1f" % ((s[quotient - 1] + s[quotient])/2.0) 
1
n = int(raw_input().strip()) 
s=[] 
for i in xrange(n): 
    a=int(raw_input()) 
    if len(s)==0: 
     s.append(a) 
     print "%.1f" % a 
    else: 
     for j in xrange(len(s)): 
      if a<s[j]: 
       s.insert(j,a) 
       break # inserted this break 
     if a>=s[-1]: 
      s.append(a) 
     if len(s)%2==0: 
      print "%.1f" % float((s[len(s)/2] + s[len(s)/2 -1])/2.0) 
     else: 
      print "%.1f" % s[len(s)/2] 

これは、出力と入力された:

6 
12 
12.0 
4 
8.0 
5 
5.0 
3 
4.5 
8 
5.0 
7 
6.0 

問題があなたのfor j in xrange(len(s))あなたがいる限り、次の値少ないしたように挿入されたていました。一度挿入するだけではなく、リストに追加するよりも多くの値が追加されました。 breakを追加すると、それが所属する最初のスポットが見つかった時点で1回だけ挿入されます。

+0

問題になっている6つの出力です。あなたは4.5を2つのアウトプットとして読んでいます。 – user2357112

+0

@ user2357112あなたは正しいです、私はもっと寝る必要があります、編集されます。 – MooingRawr

関連する問題