2016-07-24 7 views
2

Ein Peak-Find-Programm in einer 1-D-Python-Liste, die einen Peak mit seinem Index zurückgibt, wenn für einen Index 'x' in der Liste 'arr' if (arr [x] > arr [x + 1] und arr [x]> arr [x-1]). Sonderfall Fall 1: Im Falle des ersten Elements. Vergleichen Sie es nur mit dem zweiten Element. Wenn arr [x]> arr [x + 1], Peak gefunden. Fall 2: Letztes Element. Vergleiche mit dem vorherigen Element. Wenn arr [x]> arr [x-1], Peak gefunden. Unten ist der Code. Aus irgendeinem Grund funktioniert es nicht, wenn der Peak bei Index = 0 ist. Er arbeitet perfekt für den Peak in der Mitte und Peak am Ende. Jede Hilfe wird sehr geschätzt.Ein einfaches 1-D-Peak-Programm in Python

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 

Antwort

1

Ihr Problem liegt in der Initialisierung der Schleife

for x in lst: 

Mit dieser Schleife für Ihr letztes Beispiel wird x 4 sein, dann 3, dann 2, dann 1.

Dies wird durchlaufen die Indizes der Liste r

for x in range(len(lst)): 

: durch das Aussehen Ihres Codes, es scheint, dass Sie sagen wollen ather als die Werte in der Liste. Der Grund, warum Ihr Code sogar zu funktionieren schien, lag darin, dass in Ihren Testfällen die Werte der Liste eng mit den Indizes der Liste übereinstimmten - berücksichtigen Sie in Zukunft mehr verschiedene Tests.

+0

Dank James für die Klarstellung. –

+0

Kein Problem - es wäre toll, wenn Sie die Antwort akzeptieren könnten, indem Sie auf das Häkchen auf der linken Seite der Antwort klicken, wenn Ihnen das hilft! – James

+0

Sicher, aber SO bittet mich, 8 Minuten zu warten, bevor ich akzeptiere –

1

x ist ein Listenelement in Ihrem Code und Sie verwenden es als Index.

sollten Sie schreiben:

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"