Pythonic方式迭代从1开始的范围

CAJ*_*AJE 8 python loops

目前,如果我想要遍历1通过n我可能会用下面的方法:

for _ in range(1, n+1):
    print(_)
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的方法来实现这一点,而无需参考n + 1

奇怪的是,如果我想迭代一个从1开始的范围,这并不罕见,我必须将增加指定两次:

  1. 随着1范围的开始.
  2. 随着+ 1范围的结束.

Rol*_*ony 17

从文档:

range([start], stop[, step])
Run Code Online (Sandbox Code Playgroud)

start 默认为 0,step 可以是任何你想要的,除了 0 和 stop 是你的上限,它不是迭代次数。因此,将 n 声明为正确的上限,并且您不必向其添加 1。

例如

>>> 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
Run Code Online (Sandbox Code Playgroud)

一个很好的功能是它也可以反向工作。

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


Seb*_*zny 13

range(1, n+1)不被视为重复,但我可以看到如果您要更改1为另一个数字,这可能会变得很麻烦。

这使用生成器删除重复:

for _ in (number+1 for number in range(5)):
    print(_)
Run Code Online (Sandbox Code Playgroud)

  • 我不会这么说。我刚刚有了这个很酷的生成器想法,它看起来真的很像 Python 并且想分享它。 (5认同)