Algorithmus (Python): Finde die kleinste Zahl größer als k

7

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

    
Fraz 12.11.2011, 00:43
quelle

4 Antworten

7

Binäre Suche wäre ein Standardverfahren, um damit umzugehen, aber nur wenn die Liste sortiert ist, wie die vorherige Antwort gezeigt hat.

Siehe Python binäre suchähnliche Funktion, um die erste Nummer in der sortierten Liste zu finden, die größer als ein bestimmter Wert ist

und Wie finden Sie in Python den Index des ersten Werts größer als einen Schwellenwert in einer sortierten Liste?

zur Diskussion eines Moduls, das dies für Sie erledigt: Ссылка

    
DNA 12.11.2011, 01:11
quelle
15
%Vor%     
Sven Marnach 12.11.2011 00:44
quelle
4

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.

    
Martin Thoma 30.08.2013 10:21
quelle
2

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.

    
Mithon 12.11.2011 01:07
quelle

Tags und Links