python for 中的range

在以往用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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章