如果函數(shù)要返回一系列結果,我們常見的方法就是將結果放到一份列表中,然后返回給調(diào)用者。比如下面的函數(shù),返回字符串中每個單詞的首字母在真?zhèn)€字符串中的索引:
安丘網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)公司。
運行結果:
上述的結果完全符合我們的預期,但 get_word_index 函數(shù)不夠簡潔。下面我們嘗試使用生成器來實現(xiàn):
運行結果:
改寫之后,不僅運行結果符合要求,由于不需要和 result 列表交互,函數(shù)也變得非常簡潔。下面我們就來詳細學習下生成器吧~
生成器是指使用 yield 表達式的函數(shù),調(diào)用生成器函數(shù)時,它并不會真的運行,而是會返回迭代器。每次在這個迭代器上面調(diào)用內(nèi)置的 next 函數(shù)時,迭代器就會把生成器推進到下一個 yield 表達式那里。生成器傳給 yield 的值均會由迭代器返回給調(diào)用者。
此外,如果輸入量非常大,使用列表作為返回值,那么程序就有可能耗盡內(nèi)存并崩潰。相反,使用生成器之后,則可以應對任意長度的輸入數(shù)據(jù)。
例如,下面這個生成器函數(shù)可以獲取文件中單詞的索引,而不管文件內(nèi)容多大,該函數(shù)執(zhí)行時消耗的內(nèi)存,只由單行的文本長度決定:
其中 test_generator.txt 中的內(nèi)容如下:
運行結果:
下面這句話特別重要: 生成器函數(shù)返回的迭代器,是由狀態(tài)的,及調(diào)用者不應該反復使用它 。我們那 word_index_iter 來說明:
如果想重復調(diào)用,請將其封裝成容器:
運行結果:
關于上述自定義容器的實現(xiàn)原理,我的另外一篇文章做了詳細介紹,鏈接奉上:
Python中的find( )方法
用于檢驗字符串是否包含子字符串str,如果已指定beg和end范圍,則檢驗將在制定范圍內(nèi)。
如果包含字符串,返回開始的索引值,否則返回-1。
語法:str.find(str,beg=0,end=len(string))
str——指定檢索的字符串
beg——開始索引,默認為0
end——結束索引,默認為字符串的長度
find()函數(shù)找不到時返回為-1。
第11題
因為取字符串TempStr的從TempStr[3]到TempStr[-2]的字符,
這里的下標都是從0開始,Python的數(shù)學取值區(qū)間都是[3,-1)半開區(qū)間,
因此取值范圍是[3,-2],運行結果是3.14159
第13題
這是一個求400到500間的水仙花數(shù)的程序,水仙花數(shù)是指各個數(shù)位上的數(shù)的3次方的和等于這個數(shù)本身的3位數(shù),
變量i是取這個3位數(shù)的百位上的數(shù)字,變量j是取這個3位數(shù)的十位上的數(shù)字,變量k是取這個3位數(shù)的個位上的數(shù)字,
如果這個數(shù)等于各個數(shù)位上的數(shù)的3次方的和,則打印這個數(shù),在400到500中水仙花數(shù)只有407.
你也可以用4*4*4+0*0*0+7*7*7=64+0+343=407來判斷答案是A,408不滿足上述條件,153和159不在400到500范圍內(nèi)
第43題
Python中的list中的index函數(shù)是返回字符串's'在list中的索引位置(Python的索引下標都是從0開始),后面的5和10,是可選項表示查找從下標5到下標10的范圍,
因為Python都是半開區(qū)間,所以實際范圍為[5,9]區(qū)間,所以在"ky is"中查找's',其索引位置在整個字符串中是9,返回打印9
使用python做機器學習的一般都是從k-近鄰算法開始學習。
這就很難繞開argsort()函數(shù),但是在使用argsort()函數(shù)時大部分初學者都會被繞暈進去。
argsort()函數(shù)是用來返回數(shù)組值從小到大索引值的。舉例
那么
下面講一下詳細邏輯:
我們把矩陣a從小到大排序,記排序后的矩陣為b:
矩陣a和b的關系:
所以a.argsort(),也就是a排序后索引值就是[1,2,0]
PS:索引值相當于頁數(shù),是一個排序值,不等于元素的值。
像書的目錄一樣,對于例子中的矩陣,我們有如下索引:
6............0
4............1
5............2
所以排序后b=[4,5,6],用索引值來表達就是[1,2,0]
numpy中有函數(shù)argsort來返回排序后的下標
結果
pytorch中的torch.sort本身就能返回排序后的下標
Python中沒有直接調(diào)用的接口,怎么辦呢?
用enumerate再排序就可以了
結果