2016-07-24 7 views
2

リスト 'arr'のインデックス 'x'に対して、そのインデックスでピークを返す1次元Pythonリストのピーク検出プログラムif(arr [x] > arr [x + 1]およびarr [x]> arr [x-1])。 特殊ケース ケース1:最初の要素の場合。 2番目の要素と比較するだけです。 arr [x]> arr [x + 1]の場合、ピークが検出されます。 ケース2:最後の要素。前の要素と比較します。 arr [x]> arr [x-1]の場合、ピークが検出されます。 以下はそのコードです。 何らかの理由で、ピークがインデックス= 0にある場合には機能しません。中間のピークと最後のピークで完全に機能します。 何か助けていただければ幸いです。Pythonの単純な1次元ピーク検出プログラム

import sys 
def find_peak(lst): 
    for x in lst: 
     if x == 0 and lst[x] > lst[x+1]: 
      print "Peak found at index", x 
      print "Peak :", lst[x] 
      return 

     elif x == len(lst)-1 and lst[x] > lst[x-1]: 
      print "Peak found at index", x 
      print "Peak :", lst[x] 
      return 

     elif x > 0 and x < len(lst)-1: 
      if lst[x] > lst[x+1] and lst[x] > lst[x-1]: 
       print "Peak found at index", x 
       print "Peak :", lst[x] 
       return 

    else : 
     print "No peak found" 

def main(): 
    lst = [] 
    for x in sys.argv[1:]: 
    lst.append(int(x)) 

    find_peak(lst) 

if __name__ == '__main__': 
    main() 

Anuvrats-MacBook-Air:Python anuvrattiku$ python peak_finding_1D.py 1 2 3 4 
Peak found at index 3 
Peak : 4 
Anuvrats-MacBook-Air:Python anuvrattiku$ python peak_finding_1D.py 1 2 3 4 3 
Peak found at index 3 
Peak : 4 
Anuvrats-MacBook-Air:Python anuvrattiku$ python peak_finding_1D.py 4 3 2 1 
No peak found 

答えて

1

あなたの問題は、このループを使用してループ

for x in lst: 

の初期化にあり、あなたの最後例えば、xが、その後、その後、その後、4、3、2 1

になりますあなたのコードを見ると、次のようになります。

for x in range(len(lst)): 

これは、リストrのインデックスを繰り返しますリスト内の値よりも高い。テストケースでは、リストの値がリストのインデックスとよく似ているため、将来的にはより多様なテストが考慮されるため、コードが機能するようになったようです。

+0

おかげでジェームズを明確化するために。 –

+0

問題ありません - もしあなたが助けてくれれば、答えの左側にあるチェックマークをクリックして答えを受け入れることができれば素晴らしいでしょう! – James

+0

申し訳ありませんが、SOが受け入れる前に8分待つように求めています –

1

xはコード内のリスト要素であり、インデックスとして使用しています。

次のように記述する必要があります

def find_peak(lst): 
    for i,x in enumerate(lst): 
     if i == 0 and x > lst[i+1]: 
      print "Peak found at index", i 
      print "Peak :", x 
      return 

     elif i == len(lst)-1 and x > lst[i-1]: 
      print "Peak found at index", i 
      print "Peak :", x 
      return 

     elif i > 0 and i < len(lst)-1: 
      if x > lst[i+1] and x > lst[i-1]: 
       print "Peak found at index", i 
       print "Peak :", x 
       return 

    else : 
     print "No peak found" 
関連する問題