Seite 1 von 1
Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 16:25
von Natrium
Guten Tag zusammen,
Ich habe ein kleines Problem - und zwar soll mein Programm aus einer verschachtelten Liste die
kürzeste Liste auswählen und dann den Inhalt ausgeben.
Die Länge der verschachtelten Liste ist variabel und könnte folgend aussehen:
Code: Alles auswählen
[['A', 'B', 'C'], ['D', 'E']]
oder
[['A', 'B', 'E'], ['A', 'E','F','G'],['H','I','J','K','L']]
Ausgabe sollte dann z.B. bei Nummer 1)
und bei Nummer 2)
sein.
Ich probiere mich jetzt schön länger mit range / len aber bin zu keinem sinnvollen Ergebnis gekommen.
Danke schon mal für Hilfe & einen angenehmen Osterabend noch

Greetz
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 16:34
von Sirius3
Und was hast Du probiert?
Eigentlich ist das mit min und key=len ein Einzeiler.
Wenn Du aber selbst mit einer for-Schleife das kürzeste Element suchen willst, dann brauchst Du eine for-Schleife über die Elemente der Liste, und kein range.
Du mußt Dir halt immer das aktuell kürzeste Element in einer Variable merken.
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 16:55
von snafu
Natrium hat geschrieben: Montag 13. April 2020, 16:25
Ich probiere mich jetzt schön länger mit range / len aber bin zu keinem sinnvollen Ergebnis gekommen.
Mit range() gehts auch, wäre aber der umständlichere Weg und ist auch nicht so gern gesehen. Der Zugriff mittels
wurde in vielen Programmiersprachen durch den moderneren
foreach-Zugriff ersetzt oder zumindest als Alternative angeboten. Das sollte man dann auch in Python beherzigen, z.B. indem man ein
Grundlagen-Tutorial liest. So erfährt man recht einfach, wie eine for-Schleife in Python geschrieben wird (Kapitel 4.2 in meinem Link). Und ansonsten könntest du auch einfach mal Code von dir zeigen, da kann man besser helfen als mit allgemeinen Aussagen.

Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:02
von Natrium
Vielen Dank euch schonmal für die Antworten
Ich war jetzt soweit, dass ich den Output bekomme, wie lang die einzelnen Listen sind, durch:
Code: Alles auswählen
def kurz_liste(liste):
for reihe in liste:
print(len(reihe))
Damit bekomme ich dann jedenfalls bereits raus, wie lang die einzelnen Listen sind. Allerdings tue ich mich jetzt ein wenig schwer beim Vergleich der Liste & der Ausgabe der kürzesten dann.
Lg
Edit - Sorry meinte natürlich len(reihe) - Man vergebe mir, habs tatsächlich aus dem Kopf gemacht gerade.
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:11
von snafu
Erstmal heißt es natürlich len(reihe) und nicht (len)reihe. Da vermute ich mal, dass du als Anfänger noch nicht die Übung hast, das aus dem Kopf richtig aufzuschreiben. Und zur Frage: Naja, was hindert dich daran, dir die kleinste Länge zu merken und in den Schleifendurchläufen diese Länge mit der bisher kleinsten Länge zu vergleichen? Tipp: Dazu brauchst du eine Verzweigung (if-Anweisung), weil die alte kleinste Länge ja überschrieben werden muss, wenn die aktuelle Länge kleiner ist.
Als Startwert kannst du eine Zahl nehmen, die extra groß gewählt ist (100, 1000, was auch immer). Ich weiß ja nicht, was euer Lehrer da erwartet. Um ganz sicher zu sein, ginge auch float("inf"), was für Unendlich steht. Den muss man natürlich vor der Schleife festlegen.
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:14
von __blackjack__
@Natrium: Damit bekommst Du gar nichts heraus, ausser einen Synax-Fehler aus dem Compiler:
Code: Alles auswählen
In [499]: def kurz_liste(liste):
...: for reihe in liste:
...: print((len)reihe)
...:
File "<ipython-input-499-3cabd82fc0f5>", line 3
print((len)reihe)
^
SyntaxError: invalid syntax
Wenn danach gefragt wird was Du versucht hast, dann bitte tatsächlich auch zeigen was Du versucht hast, und nicht irgend etwas ähnliches.
Die einfachste Lösung wurde bereits genanng: die `min()`-Funktion mit entsprechendem `key`-Argument.
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:23
von Natrium
Alles klaro - danke für den Input, ich versuche mich weiter dran, das hat auf jeden Fall schon geholfen.
Thanks!
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:31
von __deets__
Die min-Funktion hat ein key-Argument. Wenn du das auf len setzt, dann solltest du schon fertig sein.
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:39
von snafu
Wurde jetzt schon mehrfach drauf hingewiesen und bestimmt auch wahrgenommen. Möglicherweise ist das aber eine Schulaufgabe und man soll es selber schreiben.
In einer Welt ohne min() würde es auch so gehen:
Code: Alles auswählen
from functools import reduce
items = [['A', 'B', 'E'], ['A', 'E','F','G'], ['X'], ['H','I','J','K','L']]
smallest = reduce(lambda a, b: a if len(a) < len(b) else b, items)
print(smallest)
Re: Verschachtelte Listen - Länge vergleichen / Kürzeste auswählen
Verfasst: Montag 13. April 2020, 17:55
von Natrium
Alles klar - das ist ja mehr als simpel. Aber man lernt ja immer dazu )
Vielen Dank für die Unterstützung allerseits, die Min-Funktion war mir bis dato nicht bekannt.
lg