Hallo zusammen
ich habe ein Problem die Liste "zahlen= [[2,3,4],[2,44,5,6,77],[9,8,7,6,55]]" mit verschiedene Größen ordentlich auszugeben, wenn die inneren Listen verschieden Größen hat.
Mit len(zahlen) bekomme ich ja die Anzahl der Listen die in der Liste zahlen drin sind. Wie bekomme ich jetzt zb die Größe der inneren Liste [2,44,5,6,77] ?
Und wie kann ich die Liste mit einer for schleife herausgeben?
for schleife bei list in list
@kannickel: bei der Programmierung versuchst man immer ein komplexes Problem auf einfachere Probleme zurückzuführen. Wie würdest Du eine einfache Liste mit Zahlen ausgeben? Wie würdest Du eine Operation auf ein einzelnen Element auf eine Liste mit Elementen anwenden?
Das Vorgehen lautet:
Für jede innere Liste in äußere Liste -> Gib Länge der jeweiligen inneren Liste
for und len() kennst du ja bereits. Jetzt musst du beides entsprechend kombinieren.
Für die Ausgabe könntest du erstmal print() benutzen. Danach kannst du überlegen ob man das für den internen Gebrauch sinnvoller lösen kann...
Für jede innere Liste in äußere Liste -> Gib Länge der jeweiligen inneren Liste
for und len() kennst du ja bereits. Jetzt musst du beides entsprechend kombinieren.
Für die Ausgabe könntest du erstmal print() benutzen. Danach kannst du überlegen ob man das für den internen Gebrauch sinnvoller lösen kann...
Also um die liste auszugeben, benutze ich den code:
Und um die Größe von der innere Liste zu bekommen würde ich sowas in der Art versuchen:
print(len(zahlen[0][0]))
mit for schleife:
Aber leider bekomme ich nur eine Fehlermeldung : TypeError: object of type 'int' has no len()
Code: Alles auswählen
for i in range(len(zahlen)):
print(zahlen[i])
Und um die Größe von der innere Liste zu bekommen würde ich sowas in der Art versuchen:
print(len(zahlen[0][0]))
mit for schleife:
Code: Alles auswählen
for i in range(len(zahlen)):
for y in range(len(zahlen[i][y]):
print(zahlen[i][y])
Gewoehn dir am besten gar nicht erst an in Python beim iterieren ueber Listen (oder anderen Sequenzen) das Pattern "for i in range(len(sequenz))" zu nutzen.
Python legt einen starken Fokus auf Iteration, und ueber eine Liste iteriert man so:
Wenn man dazu den Index noch braucht aus welchem Grund auch immer benutzt man enumerate:
Der Vorteil ist, das diese Methode auch funktionert, wenn man etwas aufzaehlbares hat, das aber nicht ueber einen Index ansprechbar ist. Zeilen in einer Datei zB.
Und dann hast du auch gleich eine Unter-Liste, mit der du genauso weiterarbeiten kannst.
Python legt einen starken Fokus auf Iteration, und ueber eine Liste iteriert man so:
Code: Alles auswählen
for item in liste:
...
Code: Alles auswählen
for i, item in enumerate(liste):
...
Und dann hast du auch gleich eine Unter-Liste, mit der du genauso weiterarbeiten kannst.
@kannickel: die Fehlermeldung sollte eigentlich heißen, dass y noch nicht definiert ist. Iteriert man direkt über Listen, können solche Fehler aber gleich gar nicht auftauchen:
Ürigens wird immer mit 4 Leerzeichen pro Ebene eingerückt, nicht mit 3.
Code: Alles auswählen
for zeile in zahlen:
for zahl in zeile:
print(zahl)
Danke für die Hilfe.
Genau das Beispiel habe ich gesucht.
Das mit enumerate schaue ich mir gleich nochmal richtig an, bzw die komplette for Schleife. Es ist doch etwas anders als in c++.
Aber wie bekomme ich die Größe der verschachteltet Liste ?
Und wie macht ihr den Code farbig ?
Genau das Beispiel habe ich gesucht.
Code: Alles auswählen
for zeile in zahlen:
for zahl in zeile:
print(zahl)
Aber wie bekomme ich die Größe der verschachteltet Liste ?
Und wie macht ihr den Code farbig ?
Die Groesse der Liste gibt's natuerlich nach wie vor ueber len. Das aendert sich ja nicht, du musst ja nicht ueber die innere Liste laufen, wenn dich nur die Laenge interessiert.
Fuer den farbigen Code statt dem Knopf "Code" das Dropdown "Code auswaehlen" direkt hier ueber dem Editor-Fenster benutzen. Da musst du natuerlich Python auswaehlen.
Fuer den farbigen Code statt dem Knopf "Code" das Dropdown "Code auswaehlen" direkt hier ueber dem Editor-Fenster benutzen. Da musst du natuerlich Python auswaehlen.
So habe auch mein letztes Problem gelöst.
Bestimmung der Größe von den inneren Listen:
Danke für die Hilfe
Bestimmung der Größe von den inneren Listen:
Code: Alles auswählen
for zeile in zahlen:
print(len(zeile))
Danke für die Hilfe
Da Python ein faible für Listen (Sequenzen im weitesten Sinne) hat, gibt es eine Reihe von Hilfmitteln zum Arbeiten mit eben diesen Listen:
[codebox=pycon file=Unbenannt.txt]>>> import itertools
>>> xss = [[2, 3, 4], [2, 44, 5, 6, 77], [9, 8, 7, 6, 55]]
>>> for x in itertools.chain.from_iterable(xss):
... print(x, end=' ')
...
2 3 4 2 44 5 6 77 9 8 7 6 55 >>>[/code]
Das mag Dir im Moment nicht wirklich weiterhelfen, da Du das Beispiel im Detail nicht nachvollziehen kannst. Behalte es aber im Hinterkopf, dass es Lösungen zu Problemen gibt, welche mit "antikem" Wissen (Iterieren über Index) nur umständlich gelöst werden können.
[codebox=pycon file=Unbenannt.txt]>>> import itertools
>>> xss = [[2, 3, 4], [2, 44, 5, 6, 77], [9, 8, 7, 6, 55]]
>>> for x in itertools.chain.from_iterable(xss):
... print(x, end=' ')
...
2 3 4 2 44 5 6 77 9 8 7 6 55 >>>[/code]
Das mag Dir im Moment nicht wirklich weiterhelfen, da Du das Beispiel im Detail nicht nachvollziehen kannst. Behalte es aber im Hinterkopf, dass es Lösungen zu Problemen gibt, welche mit "antikem" Wissen (Iterieren über Index) nur umständlich gelöst werden können.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Noch ein kleine Frage. Bei meine Übung von "automate the boring stuff: table printer" habe ich die Aufgabe wie folgt gelöst:
Ich finde in der in den Listen das Größte Wort und speicher es dann in colWidths ab.
Kann ich das mit der for schleife anders machen? Weil ich "for i in range(len(sequenz))" Pattern vermeiden soll.
Ich finde in der in den Listen das Größte Wort und speicher es dann in colWidths ab.
Code: Alles auswählen
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
colWidths = [0] * len(tableData)
for i in range(len(tableData)):
for l in tableData[i]:
if len(l) >= colWidths[i]:
colWidths[i] = len(l)
print(colWidths)
Kann ich das mit der for schleife anders machen? Weil ich "for i in range(len(sequenz))" Pattern vermeiden soll.
kannickel hat geschrieben:Kann ich das mit der for schleife anders machen? Weil ich "for i in range(len(sequenz))" Pattern vermeiden soll.
Code: Alles auswählen
tabledata = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
print([max(len(item) for item in column) for column in tabledata])
@kbr: gerade falschrum. Du hast jetzt die Maximale Länge pro Zeile und nicht pro Spalte.
Code: Alles auswählen
column_widths = [len(max(column, key=len)) for column in zip(*tabledata)]
@__deets__ ich habe mehrer Variation versucht aber immer diesen Fehler bekommen:
TypeError: list indices must be integers or slices, not list
Deswegen habe ich ja die Index Methode mit range(len) benutzt.
Wollte nur wissen ob es eine bessere Methode gibt, sowie:
TypeError: list indices must be integers or slices, not list
Deswegen habe ich ja die Index Methode mit range(len) benutzt.
Wollte nur wissen ob es eine bessere Methode gibt, sowie:
Code: Alles auswählen
print([max(len(item) for item in column) for column in tabledata])