list的話題的確不少,而且,在編程中,用途也非常多。
有看官可能要問了,如果要生成一個list,除了要把元素一個一個寫上之外,有沒有能夠讓計算機自己按照某個規律生成list的方法呢?
如果你提出了這個問題,充分說明你是一個“懶人”,不過這不是什么壞事情,這個世界就是因為“懶人”的存在而進步。“懶人”其實不懶。
對list的操作
range(start,stop)生成數字list
range(start, stop[, step])是一個內置函數。
要研究清楚一些函數特別是內置函數的功能,建議看官首先要明白內置函數名稱的含義。因為在python中,名稱不是隨便取的,是代表一定意義的。關于取名字問題,可以看參考本系列的:永遠強大的函數中的《取名字的學問》部分內容。
range
n. 范圍;幅度;排;山脈
vi. (在...內)變動;平行,列為一行;延伸;漫游;射程達到
vt. 漫游;放牧;使并列;歸類于;來回走動
在具體實驗之前,還是按照管理,摘抄一段官方文檔的原話,讓我們能夠深刻理解之:
從這段話,我們可以得出關于range()函數的以下幾點:
這個函數可以創建一個數字元素組成的列表。
這個函數最常用于for循環(關于for循環,馬上就要涉及到了)
函數的參數必須是整數,默認從0開始。返回值是類似[start, start + step, start + 2*step, ...]的列表。
step默認值是1。如果不寫,就是按照此值。
如果step是正數,返回list的最最后的值不包含stop值,即start+istep這個值小于stop;如果step是負數,start+istep的值大于stop。
step不能等于零,如果等于零,就報錯。
在實驗開始之前,再解釋range(start,stop[,step])的含義:
start:開始數值,默認為0,也就是如果不寫這項,就是認為start=0
stop:結束的數值,必須要寫的。
step:變化的步長,默認是1,也就是不寫,就是認為步長為1。堅決不能為0
實驗開始,請以各項對照前面的講述:
>>> range(1,9) #start=1
[1, 2, 3, 4, 5, 6, 7, 8]
>>> range(0,9,2) #step=2,每個元素等于start+i*step,
[0, 2, 4, 6, 8]
僅僅解釋一下range(0,9,2)
如果是從0開始,步長為1,可以寫成range(9)的樣子,但是,如果步長為2,寫成range(9,2)的樣子,計算機就有點糊涂了,它會認為start=9,stop=2。所以,在步長不為1的時候,切忌,要把start的值也寫上。
start=0,step=2,stop=9.list中的第一個值是start=0,第二個值是start+1step=2(注意,這里是1,不是2,不要忘記,前面已經講過,不論是list還是str,對元素進行編號的時候,都是從0開始的),第n個值就是start+(n-1)step。直到小于stop前的那個值。
熟悉了上面的計算過程,看看下面的輸入誰是什么結果?
>>> range(-9)
我本來期望給我返回[0,-1,-2,-3,-4,-5,-6,-7,-8],我的期望能實現嗎?
分析一下,這里start=0,step=1,stop=-9.
第一個值是0;第二個是start+1*step,將上面的數代入,應該是1,但是最后一個還是-9,顯然出現問題了。但是,python在這里不報錯,它返回的結果是:
報錯和返回結果,是兩個含義,雖然返回的不是我們要的。應該如何修改呢?
有了這個內置函數,很多事情就簡單了。比如:
100以內的自然數中的偶數組成的list,就非常簡單地搞定了。
思考一個問題,現在有一個列表,比如是["I","am","a","pythoner","I","am","learning","it","with","qiwsir"],要得到這個list的所有序號組成的list,但是不能一個一個用手指頭來數。怎么辦?
請沉思兩分鐘之后,自己實驗一下,然后看下面。
再用手指頭指著pythoner里面的元素,數一數,是不是跟結果一樣。
排排坐,分果果
排序,不管在現實還是在網絡上都是隨處可見的。梁山好漢要從第一個排序到第108個,這是一個不很容易搞定的活。
前面提到的內置函數range()得到的結果,就是一個排好序的。對于一個沒有排好序的list,怎么排序呢?
有兩個方法可以實現對list的排序:
list.sort(cmp=None, key=None, reverse=False)
sorted(iterable[, cmp[, key[, reverse]]])
通過下面的實驗,可以理解如何排序的方法
>>> number = [1,4,6,2,9,7,3]
>>> number
[1, 4, 6, 2, 9, 7, 3]
>>> sorted(number)
[1, 2, 3, 4, 6, 7, 9]
>>> number = [1,4,6,2,9,7,3]
>>> number
[1, 4, 6, 2, 9, 7, 3]
>>> number.sort(reverse=True) #開始實現倒序
>>> number
[9, 7, 6, 4, 3, 2, 1]
>>> number = [1,4,6,2,9,7,3]
>>> number
[1, 4, 6, 2, 9, 7, 3]
>>> sorted(number,reverse=True)
[9, 7, 6, 4, 3, 2, 1]
其實,在高級語言中,排序是一個比較熱門對的話題,如果有興趣的讀者,可以到我寫的有關算法中查看有關排序的話題。
至此,有關list的基本操作的內置函數,就差不多了。不過最后,還要告訴看官們一個學習方法。因為python的內置函數往往不少,有時候光憑教程,很難學到全部,那么,最關鍵地是要自己會查找都有哪些函數可以用。怎么查找呢?
一個非常重要的方法
假設有一個list,如何知道它所擁有的內置函數呢?請用help(),幫助我吧。
>>> help(list)
就能夠看到所有的關于list的函數,以及該函數的使用方法。
新聞熱點
疑難解答
圖片精選