摘要:要研究清楚一些函數(shù)特別是內(nèi)置函數(shù)的功能,建議看官首先要明白內(nèi)置函數(shù)名稱的含義。前面提到的內(nèi)置函數(shù)得到的結(jié)果,就是一個排好序的。至此,有關(guān)的基本操作的內(nèi)置函數(shù),就差不多了。
list的話題的確不少,而且,在編程中,用途也非常多。
有看官可能要問了,如果要生成一個list,除了要把元素一個一個寫上之外,有沒有能夠讓計算機(jī)自己按照某個規(guī)律生成list的方法呢?
如果你提出了這個問題,充分說明你是一個“懶人”,不過這不是什么壞事情,這個世界就是因為“懶人”的存在而進(jìn)步?!皯腥恕逼鋵嵅粦?。
對list的操作 range(start,stop)生成數(shù)字listrange(start, stop[, step])是一個內(nèi)置函數(shù)。
要研究清楚一些函數(shù)特別是內(nèi)置函數(shù)的功能,建議看官首先要明白內(nèi)置函數(shù)名稱的含義。因為在python中,名稱不是隨便取的,是代表一定意義的。關(guān)于取名字問題,可以看參考本系列的:永遠(yuǎn)強(qiáng)大的函數(shù)中的《取名字的學(xué)問》部分內(nèi)容。
range
n. 范圍;幅度;排;山脈
vi. (在...內(nèi))變動;平行,列為一行;延伸;漫游;射程達(dá)到
vt. 漫游;放牧;使并列;歸類于;來回走動
在具體實驗之前,還是按照管理,摘抄一段官方文檔的原話,讓我們能夠深刻理解之:
This is a versatile function to create lists containing arithmetic progressions. It is most often used in for loops. The arguments must be plain integers. If the step argument is omitted, it defaults to 1. If the start argument is omitted, it defaults to 0. The full form returns a list of plain integers [start, start + step, start + 2 * step, ...]. If step is positive, the last element is the largest start + i * step less than stop; if step is negative, the last element is the smallest start + i * step greater than stop. step must not be zero (or else ValueError is raised).
從這段話,我們可以得出關(guān)于range()函數(shù)的以下幾點:
這個函數(shù)可以創(chuàng)建一個數(shù)字元素組成的列表。
這個函數(shù)最常用于for循環(huán)(關(guān)于for循環(huán),馬上就要涉及到了)
函數(shù)的參數(shù)必須是整數(shù),默認(rèn)從0開始。返回值是類似[start, start + step, start + 2*step, ...]的列表。
step默認(rèn)值是1。如果不寫,就是按照此值。
如果step是正數(shù),返回list的最最后的值不包含stop值,即start+istep這個值小于stop;如果step是負(fù)數(shù),start+istep的值大于stop。
step不能等于零,如果等于零,就報錯。
在實驗開始之前,再解釋range(start,stop[,step])的含義:
start:開始數(shù)值,默認(rèn)為0,也就是如果不寫這項,就是認(rèn)為start=0
stop:結(jié)束的數(shù)值,必須要寫的。
step:變化的步長,默認(rèn)是1,也就是不寫,就是認(rèn)為步長為1。堅決不能為0
實驗開始,請以各項對照前面的講述:
>>> range(9) #stop=9,別的都沒有寫,含義就是range(0,9,1) [0, 1, 2, 3, 4, 5, 6, 7, 8] #從0開始,步長為1,增加,直到小于9的那個數(shù) >>> range(0,9) [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> range(0,9,1) [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> 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)的樣子,計算機(jī)就有點糊涂了,它會認(rèn)為start=9,stop=2。所以,在步長不為1的時候,切忌,要把start的值也寫上。
start=0,step=2,stop=9.list中的第一個值是start=0,第二個值是start+1step=2(注意,這里是1,不是2,不要忘記,前面已經(jīng)講過,不論是list還是str,對元素進(jìn)行編號的時候,都是從0開始的),第n個值就是start+(n-1)step。直到小于stop前的那個值。
熟悉了上面的計算過程,看看下面的輸入誰是什么結(jié)果?
>>> range(-9)
我本來期望給我返回[0,-1,-2,-3,-4,-5,-6,-7,-8],我的期望能實現(xiàn)嗎?
分析一下,這里start=0,step=1,stop=-9.
第一個值是0;第二個是start+1*step,將上面的數(shù)代入,應(yīng)該是1,但是最后一個還是-9,顯然出現(xiàn)問題了。但是,python在這里不報錯,它返回的結(jié)果是:
>>> range(-9) [] >>> range(0,-9) [] >>> range(0) []
報錯和返回結(jié)果,是兩個含義,雖然返回的不是我們要的。應(yīng)該如何修改呢?
>>> range(0,-9,-1) [0, -1, -2, -3, -4, -5, -6, -7, -8] >>> range(0,-9,-2) [0, -2, -4, -6, -8]
有了這個內(nèi)置函數(shù),很多事情就簡單了。比如:
>>> range(0,100,2) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
100以內(nèi)的自然數(shù)中的偶數(shù)組成的list,就非常簡單地搞定了。
思考一個問題,現(xiàn)在有一個列表,比如是["I","am","a","pythoner","I","am","learning","it","with","qiwsir"],要得到這個list的所有序號組成的list,但是不能一個一個用手指頭來數(shù)。怎么辦?
請沉思兩分鐘之后,自己實驗一下,然后看下面。
>>> pythoner ["I", "am", "a", "pythoner", "I", "am", "learning", "it", "with", "qiwsir"] >>> py_index = range(len(pythoner)) #以len(pythoner)為stop的值 >>> py_index [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
再用手指頭指著pythoner里面的元素,數(shù)一數(shù),是不是跟結(jié)果一樣。
排排坐,分果果排序,不管在現(xiàn)實還是在網(wǎng)絡(luò)上都是隨處可見的。梁山好漢要從第一個排序到第108個,這是一個不很容易搞定的活。
前面提到的內(nèi)置函數(shù)range()得到的結(jié)果,就是一個排好序的。對于一個沒有排好序的list,怎么排序呢?
有兩個方法可以實現(xiàn)對list的排序:
list.sort(cmp=None, key=None, reverse=False)
sorted(iterable[, cmp[, key[, reverse]]])
通過下面的實驗,可以理解如何排序的方法
>>> number = [1,4,6,2,9,7,3] >>> number.sort() >>> number [1, 2, 3, 4, 6, 7, 9] >>> 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) #開始實現(xiàn)倒序 >>> 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]
其實,在高級語言中,排序是一個比較熱門對的話題,如果有興趣的讀者,可以到我寫的有關(guān)算法中查看有關(guān)排序的話題。
至此,有關(guān)list的基本操作的內(nèi)置函數(shù),就差不多了。不過最后,還要告訴看官們一個學(xué)習(xí)方法。因為python的內(nèi)置函數(shù)往往不少,有時候光憑教程,很難學(xué)到全部,那么,最關(guān)鍵地是要自己會查找都有哪些函數(shù)可以用。怎么查找呢?
一個非常重要的方法假設(shè)有一個list,如何知道它所擁有的內(nèi)置函數(shù)呢?請用help(),幫助我吧。
>>> help(list)
就能夠看到所有的關(guān)于list的函數(shù),以及該函數(shù)的使用方法。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37333.html
摘要:定義在中,用方括號表示一個,在方括號里面,可以是,也可以是類型的數(shù)據(jù),甚至也能夠是這種布爾值。前面在對進(jìn)行操作的時候,有一些內(nèi)置函數(shù),比如,這是去掉左右空格的內(nèi)置函數(shù),也是的方法。 前面的學(xué)習(xí)中,我們已經(jīng)知道了兩種python的數(shù)據(jù)類型:int和str。再強(qiáng)調(diào)一下對數(shù)據(jù)類型的理解,這個世界是由數(shù)據(jù)組成的,數(shù)據(jù)可能是數(shù)字(注意,別搞混了,數(shù)字和數(shù)據(jù)是有區(qū)別的),也可能是文字、或者是聲音、...
摘要:對的操作合并有容乃大的中,對的操作提到了,也就是將某個元素追加到已知的一個后邊。如果的對象是數(shù)值型,則報錯。依然是上一條官方解釋是不是說的非常清楚明白了先到這里,下講還繼續(xù)有容乃大的 對list的操作 合并list 《有容乃大的list(1)》中,對list的操作提到了list.append(x),也就是將某個元素x 追加到已知的一個list后邊。 除了將元素追加到list中,還...
摘要:對于,就不能進(jìn)行字符的追加。與類似,也是對元素的增加。注意兩點如果正確刪除,不會有任何反饋。沒有消息就是好消息。是一個有意思的東西,內(nèi)涵豐富。并且可能會做一個有意思的游戲。 現(xiàn)在是講lis的第三章了。俗話說,事不過三,不知道在開頭,我也不知道這一講是不是能夠把基礎(chǔ)的list知識講完呢。哈哈。其實如果真正寫文章,會在寫完之后把這句話刪掉的。而我則是完全像跟看官聊天一樣,就不刪除了。 繼...
摘要:不管是還是,所發(fā)起的循環(huán),在編程中是經(jīng)常被用到的。這里重點是復(fù)習(xí)并展示一下它的循環(huán)中,做為計數(shù)器的使用。通過上述實例,主要是讓看官理解在循環(huán)中計數(shù)器的作用。是用于并行遍歷的函數(shù)。一種方法是通過循環(huán),分別從兩個中取出元素,然后求和。 不管是while還是for,所發(fā)起的循環(huán),在python編程中是經(jīng)常被用到的。特別是for,一般認(rèn)為,它要比while快,而且也容易寫(是否容易,可能因人而...
摘要:有的前面有空格,有的后面有空格去掉元素前后的空格這是一個有意思的內(nèi)置函數(shù),本來我們可以通過的方式得到一個的每個元素編號,然后在用的方式得到該元素。 對于list,由于她的確非常非常龐雜,在python中應(yīng)用非常廣泛,所以,雖然已經(jīng)介紹完畢了基礎(chǔ)內(nèi)容,這里還要用一講深入一點點,往往越深入越... list解析 先看下面的例子,這個例子是想得到1到9的每個整數(shù)的平方,并且將結(jié)果放在li...
閱讀 1115·2021-11-16 11:45
閱讀 3134·2021-10-13 09:40
閱讀 723·2019-08-26 13:45
閱讀 1222·2019-08-26 13:32
閱讀 2181·2019-08-26 13:23
閱讀 920·2019-08-26 12:16
閱讀 2832·2019-08-26 11:37
閱讀 1763·2019-08-26 10:32