in range funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Code: Alles auswählen

>>> for i in range(12):
        print(i, end=" ")
0 1 2 3 4 5 6 7 8 9 10 11 
Ich würde gerne dass nach Ausgabe von 4 Ziffern, die Ausgabe in der nächsten Zeile fortgeführt wird. Also es soll zum Schluss so aussehen:

0 1 2 3
4 5 6 7
8 9 10 11
...

Wie mache ich dies ?

PS:
Benötige es, da ich Listen in Listen habe, also eine Matrix und diese untereinander ausgeben möchte mit Beschriftungen an der Seite. Es soll also später eine Tabelle ergeben. Wenn es für das obrige keine Lösung gibt könntet ihr mir vielleicht bei der kompletten Lösung helfen.
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

@Fl4mer: Z.B. mit

Code: Alles auswählen

if (i+1) % 4 == 0:
     print()
nach dem print(i, end=' ').

eckhard
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Ganz simple Variante für Teil 1 deiner Frage

Code: Alles auswählen

for i, element in enumerate(range(12), 1):
    print(element, end = ' ' if i % 4 else '\n')
Beim Ausgeben entsprechend formatierter Tabellen muss du dich beispielweise um das korrekte Padding kümmern. Allerdings findest du im PyPi diverse Module, die solche Ascii Tabellen erzeugen können.
BlackJack

@Fl4mer: Ich verstehe den Einsatzzweck nicht. Wenn Du eine Datenstruktur hast die aus Listen in Listen besteht, dann hast Du zur Ausgabe nicht *eine* Schleife sondern *zwei*. Da stellt sich das Problem aus dem Ausgangsbeitrag so erst gar nicht.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Doch stellt sich schon. Wie schon gesagt habe ich listen in listen und ich möchte nun die Elemente der Listen untereinander aufschreiben. Also die Elemente der nullten Liste stehen über der 1 usw.

Aber du hast schon recht ich benutze zwei Schleifen zu auslesen.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Fl4mer hat geschrieben:Doch stellt sich schon.
Nein, stellt sich (bei zwei Schleifen) nicht :)

Code: Alles auswählen

In [1]: table = [ [0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

In [12]: for row in table:
    ...:     print(' '.join(str(cell).rjust(2) for cell in row))
    ...:     
 0  1  2  3
 4  5  6  7
 8  9 10 11

Zuletzt geändert von nezzcarth am Samstag 26. November 2016, 20:07, insgesamt 2-mal geändert.
BlackJack

@Fl4mer: Eine Schleife über Indexwerte mit denen dann auf Elemente von Sequenzen zugegriffen wird, ist in der Regel kein idiomatisches Python. Man kann über Elemente von Sequenzen *direkt* iterieren. Sollte man *zusätzlich* noch den Index oder eine fortlaufende Zahl zu den Elementen benötigen, gibt es die `enumerate()`-Funktion. Wenn man über mehrere Sequenzen ”parallel” iterieren möchte, nimmt man dazu in Python 2 die `itertools.izip()`-Funktion und in Python 3 die `zip()`-Funktion.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Danke Ihr habt mir sehr weitergeholfen.

Ps:
Besonders du nezzcarth.
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Noch als Anmerkung: Es gibt keine "in range"-Funktion. `range()` ist die Funktion und die liefert einen Iterator zurück. Den fragt man meistens mit der Syntax ``for name in xy`` ab (wobei `xy` hier den Funktionsaufruf bzw dessen Rückgabewert darstellt, es kann aber grundsätzlich jeder wie auch immer erreichbarer Iterator sein). Die Trennung klingt vielleicht kleinkariert, sollte aber für ein sauberes Programmieren im Kopf sein.
BlackJack

Wenn wir schon bei kleinkariert sind: `range()` liefert keinen Iterator sondern eine Sequenz, die ihrerseits iterierbar ist. Wo das zum Beispiel interessant ist, wäre das ziehen x von zufälligen Zahlen aus dem Intervall [a..b), was man mit ``random.sample(range(a, b), x)`` machen kann. Der Clou daran ist, das die Sequenz immer gleich viel, bzw. wenig, Speicher benötigt, egal wie weit `a` und `b` auseinander liegen.
Antworten