2016-12-01 3 views
1

ich Python bin neu, können Sie einen Fehler hinweisen jemand bitte, ich im Code gemacht haben:die Liste der Elemente zurück, die alle bisherigen Elemente überschreiten

numlist = [3,2,5,5,7,6,1,8,4] 
def peaks(numlist): 
    exceed = [] 
    for elem in numlist: 
     for num in exceed: 
      if elem not in exceed: 
       if num in exceed < elem in numlist: 
        exceed = exceed + [elem] 
        print(exceed) 

Das ist, was ich tun soll:

peaks (numlist) = => [3,5,7,8]

Vielen Dank für Ihre Hilfe !!

+3

'für num in überschreiten:' nie etwas tun zu gehen, weil diese Liste immer leer ist und hat keine Chance zu wachsen. –

+0

@ Madik088 keine Entschuldigung, Sie haben mehrere Probleme hier. –

+0

Danke Jungs @Alex Hall und @ Jean-François-Fabre! – Madik088

Antwort

5

Ihr Code ist einfach überkomplex und hat mehrere Probleme.

  • if num in exceed < elem in numlist: ?? Sie vergleichen Booleans ... vielleicht brauchen Sie stattdessen count?
  • for num in exceed: leer zuerst wie Alex kommentiert, und Sie testen if elem not in exceed in dieser Schleife ... überkompliziert.

nur einen höchsten Elementwert beizubehalten, tun es mit einer einzigen Schleife wie folgt aus:

numlist = [3,2,5,5,7,6,1,8,4] 
maxvalue=numlist[0]-1 
outlist=[] 
for e in numlist: 
    if e<=maxvalue: 
     pass 
    else: 
     maxvalue = e 
     outlist.append(e) 

print(outlist) 

Ergebnis:

[3, 5, 7, 8] 
0

das erste Mitglied numlist alwas das erste Element wird von die Antwort. Alle weiteren Elemente werden nur zur Antwort hinzugefügt werden, wenn sie den Maximalwert des linken Teils von numlist überschreiten, werden:

numlist = [3,2,5,5,7,6,1,8,4] 
print ([numlist[0]]+[n for i,n in enumerate(numlist[1:]) if n>max(numlist[:i+1])]) 
Verwandte Themen