python 3.2 - finden die zweite kleinsten Zahl in einer Liste mit Rekursion
So, ich muss die zweite kleinste Zahl innerhalb einer Liste von Ganzzahlen, die Verwendung von Rekursion, aber ich kann nicht für das Leben von mir erarbeiten einen Weg, es zu tun. Ich kann es tun, mit zu finden die kleinste Zahl mit dieser:
def smallest(int_list):
if(len(int_list) == 1):
return int_list[0]
else:
a = smallest(int_list[1:])
b = int_list[0]
if(a <= b):
return a
else:
return b
Kann jemand mich in die richtige Richtung?
- Erstellen Sie 2 Funktionen, eine, die findet die kleinsten und eine, die versucht zu finden, die nächste kleinste angesichts der Rückgabewert der ersten Funktion
- Anstatt nur die kleinsten, versuchen, Rückgabe eines Tupels enthält die kleinste und zweitkleinste der Teil der Liste, die Sie bearbeitet habe, so weit. Halten Sie die Aktualisierung der Tupel bei jedem Schritt.
- en.wikipedia.org/wiki/Quickselect beschreibt die Sache ziemlich gut.
- überprüfen Sie meine Antwort, die ich umgesetzt so etwas wie @shridharama vorgeschlagen.
- Eine Sache ist nicht sehr klar, Sie wollen zurück 2. kleinste auch Elemente, sind doppelte wie zurück
1
im[1,1,2,3]
? Oder Sie wollen2
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine kurze Einführung, in dem nicht
min()
odersorted()
. Es funktioniert auch, wenn es doppelte Werte in der Liste.Hier:
Sollte diese Arbeit. get_smallest_two_items() gibt ein Tupel mit dem kleinsten 2 Elemente aus dem 3 eingegeben. Umsetzung es sollte trivial sein. Beachten Sie auch, dass dieses setzt die minimale Länge der Liste ist 2.
get_smallest_two_items(a,b,c)
kommen?get_smallest_two_items()
... es ist ein FehlerEinfacheres Beispiel als mein Kommentar:
Beispiel:
Hier ist ein Ansatz, der nicht Schlag den stack für große Listen. Es wäre besser zu verwalten die Suche Endpunkte manuell, anstatt schneiden die Einführung kopieren.
Hier ist eine rein rekursive Weise. Sie brauchen, um wieder das erste, kleinste und das zweitkleinste element in einem Tupel und so weiter.
def second_smallest(my_list ein):