[英]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
列表的索引編號為0
到n-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.