Mam funkcję w python2.7.12 który generuje listę z funkcji f (x) i ma maksymalną wartość takiego:przerwać listowych
max([f(x) for x in range(n)])
Teraz chcę przerwać generacji lista na wypadek, gdyby którykolwiek z jej elementów był większy od B, i zwróć ten element. Wynik byłby taki sam, jak robi:
v = -float("inf")
for x in range(n):
v = max(v, f(x))
if v > B: return v
return v
problemem jest dla pętli, jednocześnie generując mniej elementów, działa wolniej niż listy zrozumienia dla problemu Jestem obecnie pracuje. Czy istnieje sposób użycia funkcji sprawdzania list lub metody generatora simillar, ale czy jest to sprawdzanie przeciwko B i przerywanie mid-iteracji? Celem jest obliczenie TYLKO elementów NCESSARY, ale należy je uruchamiać szybciej niż pierwszy przykład (gdzie oblicza każdy element).
Edytuj: Próbowałem wielu wskazówek, które wymyśliliście i zdecydowaliście się na prostą implementację pętli while. Ostateczny kod skończyło się to w następujący sposób:
v = float("-inf")
x = 0
while x < n:
v = max(v, f(x))
if v > B: return v
To działa nieco szybciej niż pętli for, choć nie może być szybsze rozwiązanie (jeszcze nie raz wszystkich proponowanych rozwiązań, przepraszam) , ale lubię prostotę.
Dziękuję.
Możesz dodać instrukcję if w zrozumieniu listy. – JackTheCrab
@JackTheCrab, który wciąż je obliczałby –
dlaczego nie tylko "while"? –