簡體   English   中英

為什么python中的范圍“停止”?

[英]Why does range in python “stop short”?

好的,給孩子們教python。 我們剛寫了第一個小程序:

b = 0
for a in range (1, 10)
    b = b + 1
    print a, b

在9,9停止。他們問“為什么會這樣”,我不能說我知道答案。

我的代碼總是涉及文件,我的“讀取行”不能阻止一行短路,所以我實際上並不知道。 在數學符號中,這種行為將是[1,10) 技術上(1,10)將是2,3,4,5,6,7,8,9 ,實際上我想要[1,10]

它通常比替代品更有用。

  • range(10)正好返回10個項目(如果你想重復10次)
  • range(10)返回10個項目列表中的索引
  • range(0, 5) + range(5, 10) == range(0, 10) ,這使得更容易推理范圍

關鍵是range定義為range(start,stop,step=1) http://docs.python.org/2/library/functions.html#range 最后一個元素總是少於stop

實際上,它的定義方式是因為len n列表的索引編號為0n-1

理論上令人滿意的答案是它避免了替代方案,即序列中的最后一個元素將是大於或等於stop的第一個整數,這通常是意外的。 這也導致了Pavel Anossov列出的優秀屬性,所有這些屬性都會受到大於或等於規則的影響。

樣式上的點:在沒有空格的情況下寫入range (1, 10)更為常見,因為range是返回所請求范圍內的項目的列表(或3.x,生成器)的函數。 python中的for循環總是按順序遍歷數據結構或生成器的元素(通常是iterable對象)。

這就是python的range 文檔引用:

這是一個用於創建包含算術進度的列表的通用函數。 它最常用於for循環。 參數必須是普通整數。 如果省略step參數,則默認為1.如果省略start參數,則默認為0.完整表單返回普通整數列表[start,start + step,start + 2 * step,...] 。 如果step為正,則最后一個元素是最大的start + i * step小於stop; 如果step為負數,則最后一個元素是最小的start + i * step大於stop。 step不能為零(否則引發ValueError)。

暫無
暫無

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

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