Seite 1 von 1

in range funktion

Verfasst: Samstag 26. November 2016, 18:21
von Fl4mer

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.

Re: in range funktion

Verfasst: Samstag 26. November 2016, 18:44
von eckhard
@Fl4mer: Z.B. mit

Code: Alles auswählen

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

eckhard

Re: in range funktion

Verfasst: Samstag 26. November 2016, 18:50
von nezzcarth
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.

Re: in range funktion

Verfasst: Samstag 26. November 2016, 19:04
von 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.

Re: in range funktion

Verfasst: Samstag 26. November 2016, 19:40
von Fl4mer
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.

Re: in range funktion

Verfasst: Samstag 26. November 2016, 19:51
von nezzcarth
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


Re: in range funktion

Verfasst: Samstag 26. November 2016, 19:57
von 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.

Re: in range funktion

Verfasst: Sonntag 27. November 2016, 16:09
von Fl4mer
Danke Ihr habt mir sehr weitergeholfen.

Ps:
Besonders du nezzcarth.

Re: in range funktion

Verfasst: Montag 28. November 2016, 01:08
von snafu
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.

Re: in range funktion

Verfasst: Montag 28. November 2016, 01:45
von 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.