Seite 1 von 1

mehrdimensionale Listen

Verfasst: Mittwoch 16. Dezember 2020, 13:57
von Simon_2468
Moin,
im Rahmen meines Info Labors muss ich ein Algorithmus erstellen, der ein Spiel löst.
Dafür muss ich diese mehrdimensionale Liste auslesen:
[[1, 10, 10, 2], [1, 10, 10, 2], [0, 5, 5, 0], [3, 6, 7, 4], [3, 8, 9, 4]]
Ich suche nach der Position beider Nullen, denn sie repräsentieren Felder die verschoben werden können.
Ich schaffe es leider nur eine Null zu finden, die zweite wird mir nie ausgegeben.
Hat jemand eine Idee wie ich das Problem lösen kann und ich anschließend mit den Werten arbeiten kann?
Dies ist bislang mein Code: (in der start Datei ist die oben genannte Liste)

Code: Alles auswählen

# Datei einlesen
with open("start.txt") as file:
    liste = []
    for line in file:
        if not line.strip(): # <- leere Zeile == keine Daten
            continue
        row = list(map(int,line.split(","))) # Die Zeile beim Komma trennen und die Werte in int umwandeln
        liste.append(row)
print (liste) #Test: Matrix ausgeben

# Null in Liste suchen
def find (l, elem):
    for row, i in enumerate(l):
        try:
            column = i.index(elem)
        except ValueError:
            continue
        return row, column
    return -1
print(find(liste,0))

row = 0

Re: mehrdimensionale Listen

Verfasst: Mittwoch 16. Dezember 2020, 14:05
von __blackjack__
@Simon_2468: Index gibt nur den ersten Index zurück und auch Deine `find()`-Funktion bricht beim ersten gefundenen Ergebnis mit der Rückgabe ab. Du schreibst eine Funktion die nur ein Ergebnis liefert, und die liefert dann halt nur ein Ergebnis.

Du musst eine Funktion schreiben die alle Ergebnisse findet und beispielsweise in einer Liste sammelt und die dann am Schluss, nach der Suche als Ergebnis zurück liefert. Oder Du machst eine Generatorfunktion daraus und überlässt dem Aufrufer die Aufgabe das in einer Liste zu sammeln oder etwas anderes damit zu tun.

In beiden Fällen wirst Du auch gleich diesen falschen -1 Rückgabewert los. Was ist denn das für eine kaputte API, eine Funktion die entweder ein Tupel mit Indexwerten oder eine -1 liefert? `index()` macht es vor: Ausnahmefälle werden mit Ausnahmen beantwortet, nicht mit komischen Sonderspezialwerten auf die kein Mensch kommt.

Re: mehrdimensionale Listen

Verfasst: Mittwoch 16. Dezember 2020, 14:51
von Simon_2468
Es ist mein erstes Projekt und bin etwas überfordert mit dem Labor.
Welche Funktion ist in der Lage mir den Wert und die dazugehörige Position anzugeben?

Re: mehrdimensionale Listen

Verfasst: Mittwoch 16. Dezember 2020, 15:58
von noisefloor
Hallo,

überleg' dir mal, wie du das mit Stift und Papier machen würdest: du würdest die äußere Liste Liste für Liste durchgehen und die dadurch erhaltenen inneren Listen Element für Element. Immer, wenn eine Null kommt, schreibst du den Index der äußeren Liste und den Index des Elements auf. Das kann aber auch genau so programmieren.

Listen kennst du, die append-Methode kennst du, `enumerate` kennst du. Das reicht, um das "zu Fuss" zu programmieren.

Gruß, noisefloor

Re: mehrdimensionale Listen

Verfasst: Mittwoch 16. Dezember 2020, 16:26
von __blackjack__
@Simon_2468: Dafür gibt es keine Funktion. Das musst Du selbst programmieren. Das sollte kein Problem sein, denn das machst Du ja bereits für den ersten Index, also den Index der Liste. Genau so musst Du das für den zweiten Index auch machen.