Pythonische manier om een reeks te doorlopen die begint bij 1

Als ik momenteel 1tot en met nwil herhalen, zou ik waarschijnlijk de volgende methode gebruiken:

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

Is er een schonere manier om dit te bereiken zonder te hoeven verwijzen naar n + 1?

Het lijkt vreemd dat als ik een bereik wil herhalen dat normaal begint bij 1, wat niet ongebruikelijk is, ik de toename met één twee keer moet specificeren:

  1. Met de 1aan het begin van het bereik.
  2. Met de + 1aan het einde van het bereik.

Antwoord 1, autoriteit 100%

range(1, n+1)wordt niet als duplicatie beschouwd, maar ik kan me voorstellen dat dit lastig kan worden als je 1naar een ander nummer zou veranderen .

Dit verwijdert de duplicatie met behulp van een generator:

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

Antwoord 2, autoriteit 96%

Uit de documentatie:

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

De start is standaard 0, de stap kan zijn wat je wilt, behalve 0 en stop is je bovengrens, het is niet het aantal iteraties. Dus declareer n als wat uw bovengrens correct is en u hoeft er geen 1 bij op te tellen.

bijv.

>>> for i in range(1, 7, 1): print(i)
... 
1
2
3
4
5
6
>>> for i in range(1, 7, 2): print(i)
... 
1
3
5

Een leuke functie is dat het ook omgekeerd werkt.

>>> for i in range(7, 0, -1): print(i)
... 
7
6
5
4
3
2
1

Antwoord 3, Autoriteit 23%

Geen algemeen antwoord, maar voor zeer kleine reeksen (zeg tot vijf), ik vind het veel meer leesbaar om ze in een letterlijke te spellen:

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

Dat is waar, zelfs als het begint met nul.


Antwoord 4, Autoriteit 23%

range(1, n+1)Is de gebruikelijke manier om het te doen, maar als u het niet leuk vindt, kunt u uw functie maken:

def numbers(first_number, last_number, step=1):
    return range(first_number, last_number+1, step)
for _ in numbers(1, 5):
    print(_)

Antwoord 5, Autoriteit 8%

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

Dit wordt uitgevoerd:

1 
2
...
n    

Other episodes