Pythonic way to iterate through a range starting a

2020-08-10 09:13发布

Currently if I want to iterate 1 through n I would likely use the following method:

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

Is there a cleaner way to accomplish this without having to reference n + 1 ?

It seems odd that if I want to iterate a range ordinally starting at 1, which is not uncommon, that I have to specify the increase by one twice:

  1. With the 1 at the start of the range.
  2. With the + 1 at the end of the range.

标签: python loops
5条回答
地球回转人心会变
2楼-- · 2020-08-10 09:52
for i in range(n):
    print(i+1)

This will output:

1 
2
...
n    
查看更多
干净又极端
3楼-- · 2020-08-10 10:03

range(1, n+1) is not considered duplication, but I can see that this might become a hassle if you were going to change 1 to another number.

This removes the duplication using a generator:

for _ in (number+1 for number in range(5)):
    print(_)
查看更多
我只想做你的唯一
4楼-- · 2020-08-10 10:06

range(1, n+1) is common way to do it, but if you don't like it, you can create your function:

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

for _ in numbers(1, 5):
    print(_)
查看更多
Summer. ? 凉城
5楼-- · 2020-08-10 10:08

From the documentation:

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

The start defaults to 0, the step can be whatever you want, except 0 and stop is your upper bound, it is not the number of iterations. So declare n to be whatever your upper bound is correctly and you will not have to add 1 to it.

查看更多
Ridiculous、
6楼-- · 2020-08-10 10:10

Not a general answer, but for very small ranges (say, up to five), I find it much more readable to spell them out in a literal:

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

That's true even if it does start from zero.

查看更多
登录 后发表回答