Sprawdzanie czy element w liście jest większy od sąsiada z lewej i prawej

0

Wrzucam kod funkcji z docstringiem, nie wiem jak pozbyć się indexError: index out of range..

def greater(l):
    """Funkcja dla danej listy, zwraca ilość wystąpień liczby takiej, że
    jest ona większa od sąsiadującej jej liczby z lewej jak i prawej strony.
    WEJŚCIE - l: ciąg liczb w postaci listy
    WYJŚCIE - x: ilość liczb spełniających warunek z definicji funkcji.
    """

    assert type(l) == list, "Argument musi być podany w formie listy, w []"

    if len(l) == 1 or len(l) == 2:
        return 0
    x = 0
    i = 0
    while i < len(l) - 1:
        i += 1
        if l[i] > l[i - 1] and l[i] > l[i + 1]:
            x += 1
            if i == len(l) - 1:
                return x
0

No teraz to na pewno nie działa dobrze bo jeśli i=0 to ile wynosi twoje i-1?

0

Ok, zmieniłem i=1 ale teraz dostaję tylko 'None' nadal gdzieś popełniam błąd ale go nie widzę.

0

Pokaż kod na ideone razem z inputem. Albo po prostu użyj debugera.

1

https://ideone.com/cJ5TOb

na moje oko jest ok, warunek spełnia 5 oraz 6 więc 2 liczby.

0

Faktycznie działa, dzięki

0

W pythonie i nie tylko dużo transformacji danych da się wyrazić przy pomocy map, filter, itd.
Przy dużej ilości danych możesz użyć generatorów imap, ifilter, izip

a = [3, 5, 2, 6, 4]
print len(filter(lambda (x, y, z): y > x and y > z, zip(a, a[1:], a[2:])))

1 użytkowników online, w tym zalogowanych: 0, gości: 1