簡體   English   中英

遍歷從 1 開始的范圍的 Pythonic 方式

[英]Pythonic way to iterate through a range starting at 1

目前,如果我想通過n迭代1 ,我可能會使用以下方法:

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

有沒有更簡潔的方法來實現這一點而不必參考n + 1

奇怪的是,如果我想迭代一個從 1 開始的范圍,這並不罕見,我必須指定兩次增加一:

  1. 1在范圍的開頭。
  2. + 1在范圍的末尾。

從文檔中:

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

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

一個不錯的功能是它也可以反向工作。

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

如果您不將它用作索引,而是用於可以具有正值或負值的東西,它仍然會派上用場:

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

range(1, n+1)不被視為重復,但我可以看到,如果您要將1更改為另一個數字,這可能會變得很麻煩。

這使用生成器刪除重復:

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

range(1, n+1)是常用的方法,但如果你不喜歡它,你可以創建你的 function:

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

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

不是一般的答案,但對於非常小的范圍(例如,最多五個),我發現用文字拼出它們更具可讀性:

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

即使它確實從零開始也是如此。

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

這將 output:

1 
2
...
n    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM