Ich habe eine Frage aus Sicht des Algorithmus. Ich habe eine Liste von Zahlen (Floats)
%Vor%Und ich möchte die kleinste Zahl größer als (sagen wir mal) 4 finden. Also die Antwort ist 4.9 Aber neben der offensichtlichen Lösung ... (Iterieren durch Liste und Halten einer Spur der kleinsten Zahl größer als k) was ist der "pythonische Weg", dies zu tun. Danke
Dies ist ein perfektes Szenario für Filter .
%Vor%Sie können auch List Comprehensions verwenden:
%Vor% Obwohl das Listenverständnis auf den ersten Blick weniger geradlinig erscheint, ist es der empfohlene Weg. Laut einigen Python-Entwicklern sollte filter
nicht verwendet werden.
Ich habe keine Ahnung von Python, aber von einem algorithmischen Standpunkt aus kann ich vielleicht etwas hinzufügen. In Ihrem Beispiel ist Ihre Liste monoton steigend (sortiert). Wenn das für Ihre Liste immer zutrifft, könnte eine kleine Optimierung darin bestehen, die Iteration zu stoppen, sobald Sie eine Zahl größer als 4 erreicht haben.
Wenn Ihre Liste immer wenige Zahlen kleiner als 4 hat, ist dies eine großartige Optimierung. Wenn jedoch die Anzahl der Elemente vor und nach der Zielanzahl zufällig ist, ist diese Verbesserung nicht zuverlässig.
In diesem Fall können Sie die Liste durchsuchen, indem Sie sie partitionieren. Testen Sie, ob das mittlere Element größer als 4 ist. Wenn es größer ist, werfen Sie die obere Hälfte weg, andernfalls werfen Sie die untere Hälfte weg. Machen Sie dasselbe auf der neuen Half-Length-Liste. Sie müssen mit geraden und ungeraden Zahlen und mit dem Fall umgehen, wenn nur noch 1 oder 2 Elemente im Listensegment übrig sind. Bei einer großen Liste sollte dies die Anzahl der Tests erheblich reduzieren.