Seite 1 von 1

suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:12
von Phiene
Hallo Zusammen,

ich will aus einer verschachtelten Liste das größte Element raus suchen, dazu ist aber nicht die Anzahl der Listen die in der Liste sind gegeben, also brauche ich ein "variadic argument".

Code: Alles auswählen

def f(*liste):
    MAX = ''
    for item in liste:
        if item > MAX:
            MAX = item
    return MAX

liste = [['a','ab'],['Hallo'],['a','b'],['abc','cba','cad']]
print(f(liste))
es kommt dann immer die Fehlermeldung:

TypeError: '>' not supported between instances of 'list' and 'str'

kann mir dabei einer Helfen?

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:14
von sparrow
In einer Liste mit homogenen Elementen würde man so nicht suchen. Dafür kennt Python die max Funktion.

Was wäre denn das von dir erwartete Ergebnis?

Vielleicht möchtest du dir itertools.chain.from_iterable anschauen.

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:20
von Phiene
sparrow hat geschrieben: Sonntag 11. Dezember 2022, 20:14 In einer Liste mit homogenen Elementen würde man so nicht suchen. Dafür kennt Python die max Funktion.

Was wäre denn das von dir erwartete Ergebnis?
also ich soll in dem Algorithmus nicht die Max Funktion nutzen :?

die Ausgabe müsste dann 'cba' sein

ich vermute dass ich eine zweite for Schleife einbringen muss die dann die einzelnen unterlisten abruft, aber sicher bin ich mir nicht weil die versuche auch schon gescheitert sind....

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:24
von sparrow
Wenn du keine Hilfen nutzen darfst (wäre ein tolle Info im ersten Post gewesen): Du weißt ja, wie man über Elemente iterierst. Dann schau doch mal, was item so ist. Eher nicht, was der Name suggeriert.

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:27
von Phiene
also item ist in dem Fall eine unterliste von der eigentliche liste

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:30
von sparrow
Du hast eine liste mit dem Namen "liste".
Und deren Elemente sind Listen.

Wenn du weißt, wie man über die Elemente einer Liste iteriert - warum machst du das nicht für "item" (was ein eher nicht so guter Name für das ist, was es ist)?

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:39
von Phiene
meinst du eine zweite For Schleife einfügen?
ich komm einfach nicht drauf sitze da schon seit Stunden dran...

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:41
von __blackjack__
@Phiene: Das ``*`` in der Funktionssignatur gehört da nicht hin und Du brauchst kein „variadic argument“.

Und dann benutze die `max()`-Funktion. Wenn das funktioniert, schreibst Du einfach Deine eigene `max()`-Funktion. So lernst Du wie man das in der Praxis mit der `max()`-Funktion macht und verstösst nicht gegen die Randbedingungen der Aufgabe.

`itertools.chain.from_iterable()` ist dann auch nicht erlaubt? Was ist mit `map()`? Generatorausdruck? „List comprehension“?

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:43
von Phiene

Code: Alles auswählen

def f(liste):
    MAX = ''
    i = 0
    for item in liste:
        item = liste[i]
        i = 1 + i
        for it in item:
            if it > MAX:
                MAX = it
    return MAX

liste = [['a','ab'],['Hallo'],['a','b'],['abc','cba','cad']]
print(f(liste))

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:46
von sparrow
Was soll denn jetzt das unsinnige i da und warum überschreibst du item in der Schleife mit dem Objekt, das es eh schon ist?
Ich weiß, meine Aussagen sind manchmal zu subtil, aber: Deine Namensgebung wird immer schlechter.

Warum ist MAX komplett groß geschrieben? Das kennzeichnet in Python per Konvention Konstanten. Und das ist keine Konstante.

Re: suche in verschachtelter Liste

Verfasst: Sonntag 11. Dezember 2022, 20:52
von __blackjack__
@Phiene: Namen komplett in Grossbuchstaben sind Konstanten, `MAX` ist aber keine Konstante.

`i` macht keinen Sinn. Was denkst Du was `item` aus ``for item …`` ist? Das verwendest Du ja nirgends, weil Du `item` in der Schleife sofort an einen ”anderen” Wert bindest.

`item` ist immer noch ein etwas irreführender Name und `it` noch mehr, weil das eine kryptische Abkürzung ist. `it` ist letztlich ein einzelnes ”skalares” Element das man `item` nennen würde.

Die Funktion verhält sich IMHO etwas komisch wenn man eine leere Liste übergibt, oder eine Liste in der nur leere Listen enthalten sind. Soll wirklich das hier wirklich gelten:

Code: Alles auswählen

assert f([]) == f([[]]) == f([[""]])