2015-10-22 7 views
5

beginnen, wenn ich 1 durch n ich wahrscheinlich die folgende Methode verwenden würde iterieren wollen:Pythonic Art und Weise über einen Bereich iterieren Aktuell bei 1

for _ in range(1, n+1): 
    print(_) 

Gibt es einen sauberen Weg dies zu tun, ohne Referenz n + 1?

Es scheint seltsam, dass, wenn ich will eine Reihe ordinally beginnend bei 1 wiederholen, was nicht ungewöhnlich ist, dass ich die Erhöhung um eine zweimal angeben:

  1. Mit den 1 zu Beginn der Angebot.
  2. Mit dem + 1 am Ende des Bereichs.
+1

Warum denkst du, das ist ein "dreckiger" Weg? – sobolevn

+1

'n + 1' wird einmal ausgewertet, das ist also kein' schmutziger' Weg. Wenn Sie "n + 1" nicht als "Bereich" -Parameter verwenden möchten, können Sie ihn früher auswerten und das Ergebnis in einer Variablen speichern. Verwenden Sie diese Variable dann im Aufruf "Bereich". –

+0

@RafaelOsipov Ich habe in einigen Ausführungen im OP bearbeitet. – CAJE

Antwort

1

range(1, n+1) wird nicht als Duplizierung betrachtet, aber ich kann sehen, dass dies zu einem Problem werden könnte, wenn Sie 1 in eine andere Nummer ändern würden.

Dadurch wird die Duplizierung einen Generator mit:

for _ in (number+1 for number in range(5)): 
    print(_) 
+0

Schöne Antwort auf die Frage aber haben wir uns wirklich bewegt von 'Bereich (1, n + 1)' –

+0

würde ich nicht sagen. Ich hatte gerade diese coole Generatoridee, die wirklich pythonisch schien und sie teilen wollte. –

+0

Wie gesagt, nette Antwort –

0
for i in range(n): 
    print(i+1) 

erhalten Sie folgende Ausgabe:

1 
2 
... 
n  
+1

Das bedeutet nicht viel sauberer, da ich +1 verwenden müsste, wenn ich auf die Anzahl der Schleifen referenzieren möchte. Anstatt beim Definieren der Schleife einmal +1 zu verwenden, muss ich sie möglicherweise mehrmals verwenden. – CAJE

1

range(1, n+1) ist üblich Weg, es zu tun, aber wenn Sie es nicht mögen, können Sie Ihre Funktion erstellen:

def numbers(first_number, last_number, step=1): 
    return range(first_number, last_number+1, step) 

for _ in numbers(1, 5): 
    print(_) 
1

Aus der Dokumentation:

range([start], stop[, step]) 

Der Start automatisch auf 0 kann der Schritt sein, was Sie wollen, außer 0 und Stopp ist Ihre Obergrenze, es ist nicht die Anzahl der Iterationen. Also deklariere n als was auch immer deine obere Grenze ist und du musst nicht 1 hinzufügen.

1

keine allgemeine Antwort, aber für sehr kleine Bereiche (zum Beispiel bis zu fünf), finde ich es viel besser lesbar sie im wörtlichen zu buchstabieren:

for _ in [1,2,3]: 
    print _ 

das wahr ist, auch wenn es beginnt bei Null.

Verwandte Themen