在以往用range函數的時候從未深入的瞭解過,只是簡單的這樣用,而從未去想其他的
>>> range(1,5) #兩個參數的,從1到5 [1, 2, 3, 4] >>> range(1,5,2) #三個參數的,從1到5,間隔數字爲2(步長參數),所以顯示奇數 [1, 3] >>> range(5) #一個參數的,默認start是從0開始,end是5 [0, 1, 2, 3, 4]
|
今天看《python核心編程》第二版中,在講切片時,作者舉了一個例子:“有這麼一個問題:有一個字符串,我們想通過一個循環按照這樣的形式顯示它:每次都把位於最後的一個字符砍掉”,這個例子雖然很小,也很簡單 但是也讓我對range函數有了新的認識,看來以前還是書讀的不仔細,太浮躁了
書中代碼:
>>> s='abcde' >>> i=-1 >>> for i in range(-1,-len(s),-1): ... print s[:i] ...
abcd
abc
ab
a
|
但是程序存在的問題就是無法在第一次迭代的時候顯示整個字符串,而作者給出的解答方式是:
用None作爲索引值
>>> s="abcde" >>> for i in [None] + range(-1,-len(s),-1): ... print s[:i] ...
abcde
abcd
abc
ab
a
|
由此可以看出用0作爲迭代的第一項是不可行的,因爲切片s[:0]將會返回空字符串,如果是s[0:]這樣的話迭代的第一項沒有問題,但是迭代從第二項便開始出錯,這也不符合題目的要求
>>> s[:0]
''
>>> s[0:]
'abcde'
>>> s[1:]
'bcde'
因此要用正值作爲迭代項的話,第一項必須爲len(s),這就要對range的用法做出相應的修改
>>> s="abcde" >>> for i in range(len(s),0,-1): ... print s[:i] ...
abcde
abcd
abc
ab
a
|