- 論壇徽章:
- 0
|
在以往用range函數(shù)的時(shí)候從未深入的了解過,只是簡(jiǎn)單的這樣用,而從未去想其他的
>>> range(1,5) #兩個(gè)參數(shù)的,從1到5
[1, 2, 3, 4]
>>> range(1,5,2) #三個(gè)參數(shù)的,從1到5,間隔數(shù)字為2,所以顯示奇數(shù)
[1, 3]
>>> range(5) #一個(gè)參數(shù)的,默認(rèn)start是從0開始,end是5
[0, 1, 2, 3, 4]
今天看《python核心編程》第二版中,在講切片時(shí),作者舉了一個(gè)例子:“有這么一個(gè)問題:有一個(gè)字符串,我們想通過一個(gè)循環(huán)按照這樣的形式顯示它:每次都把位于最后的一個(gè)字符砍掉”,這個(gè)例子雖然很小,也很簡(jiǎn)單 但是也讓我對(duì)range函數(shù)有了新的認(rèn)識(shí),看來以前還是書讀的不仔細(xì),太浮躁了
書中代碼:
>>> s='abcde'
>>> i=-1
>>> for i in range(-1,-len(s),-1):
... print s[:i]
...
abcd
abc
ab
a
但是程序存在的問題就是無法在第一次迭代的時(shí)候顯示整個(gè)字符串,而作者給出的解答方式是:
用None作為索引值
>>> s="abcde"
>>> for i in [None] + range(-1,-len(s),-1):
... print s[:i]
...
abcde
abcd
abc
ab
a
由此可以看出用0作為迭代的第一項(xiàng)是不可行的,因?yàn)榍衅瑂[:0]將會(huì)返回空字符串,如果是s[0:]這樣的話迭代的第一項(xiàng)沒有問題,但是迭代從第二項(xiàng)便開始出錯(cuò),這也不符合題目的要求
>>> s[:0]
''
>>> s[0:]
'abcde'
>>> s[1:]
'bcde'
因此要用正值作為迭代項(xiàng)的話,第一項(xiàng)必須為len(s),這就要對(duì)range的用法做出相應(yīng)的修改
>>> s="abcde"
>>> for i in range(len(s),0,-1):
... print s[:i]
...
abcde
abcd
abc
ab
a
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/95612/showart_2046557.html |
|