




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python刪除列表中特定元素的幾種方法目錄前言思路方法1方法2:使用while循環(huán)方法3:for循環(huán)倒序刪除空字符串方法4:拷貝原列表
前言
題目如下:
給定一個(gè)僅包含大小寫字母和空格的字符串s,返回其最后一個(gè)單詞的長(zhǎng)度。如果字符串從左向右滾動(dòng)顯示,那么最后一個(gè)單詞就是最后出現(xiàn)的單詞。
如果不存在最后一個(gè)單詞,請(qǐng)返回0。
說明:一個(gè)單詞是指僅由字母組成、不包含任何空格字符的最大子字符串。
示例:
輸入:HelloWorld
輸出:5
思路
題目要求給一個(gè)字符串s,s僅包含字母和空格字符,要求返回最后一個(gè)單詞的長(zhǎng)度,考慮如下幾點(diǎn):
1、如果s是空字符,即s=,此時(shí)應(yīng)該返回0;2、如果s只包含空格字符,即s=,此時(shí)也應(yīng)該返回0;3、如果s既包含字母也包含空格(或者只包含字母),可以通過split()函數(shù),用一個(gè)空格字符切割,這樣就可以得到一個(gè)列表,這個(gè)列表只由連續(xù)的字母和空字符組成,然后把列表中的所有空字符刪除,最后把列表中的最后一項(xiàng)的長(zhǎng)度返回即可;
所以現(xiàn)在的問題就轉(zhuǎn)化為:如何刪除一個(gè)列表中的特定元素,這里的話,就是刪除列表中的空字符,即
方法1
借助一個(gè)臨時(shí)列表,把非空元素提取到臨時(shí)列表中,然后取出臨時(shí)列表最后一項(xiàng),返回其長(zhǎng)度即可
這是最笨的方法,實(shí)際運(yùn)行時(shí)也是最耗時(shí)的方法:
classSolution(object):
deflengthOfLastWord(self,s):
:types:str
:rtype:int
ifs.isspace():#判斷s是否只由空格字符組成,如s==""
return0
elifs=="":#判斷s是否為空字符串,如s==""
return0
else:#如果s不為空,且不全是由空格組成
temp=s.split("")#通過split方法,用一個(gè)空格字符將字符串s進(jìn)行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
new=[]#定義一個(gè)空列表,作為中間變量
fortintemp:#遍歷temp,把非空元素提取到new中,最后把new的最后一項(xiàng)的長(zhǎng)度返回即可
ift!="":
new.append(t)
returnlen(new[-1])
在說方法2之前,說一個(gè)錯(cuò)誤的方法:使用for循環(huán),正向遍歷列表,刪除其中的空字符,
如下:
s=["","","a","a","a","","",""]
foriinrange(0,len(s)):
ifs[i]=="":
dels[i]
print(s)
運(yùn)行上述代碼,會(huì)報(bào)錯(cuò):
原因是當(dāng)遇到空字符時(shí),把空字符刪掉后,列表長(zhǎng)度變小了,但是循環(huán)遍歷時(shí),還是按照最初的長(zhǎng)度遍歷,導(dǎo)致溢出;
另外這樣寫還存在一個(gè)弊端:可能會(huì)漏刪某些空字符,原因是當(dāng)刪掉前面的空字符后,后面的元素依次向前移動(dòng),導(dǎo)致索引與原先對(duì)應(yīng)的值發(fā)生變化,
如下:
b=["","","a","a","a","","",""]
foriinrange(0,len(b)):
ifi=len(b):#加一個(gè)判斷,當(dāng)i大于列表長(zhǎng)度時(shí),跳出循環(huán),避免報(bào)錯(cuò)
break
ifb[i]=="":
delb[i]
print(b)
所以我們?cè)诮鉀Q這個(gè)問題前,不能用for循環(huán)來正向遍歷列表
方法2:使用while循環(huán)
因?yàn)閒or循環(huán)無法達(dá)到目的,所以考慮使用while循環(huán),如下:
classSolution(object):
deflengthOfLastWord(self,s):
:types:str
:rtype:int
ifs.isspace():#判斷s是否只由空格字符組成,如s==""
return0
elifs=="":#判斷s是否為空字符串,如s==""
return0
else:#如果s不為空,且不全是由空格組成
temp=s.split("")#通過split方法,用一個(gè)空格字符將字符串s進(jìn)行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
i=0#設(shè)置初始指針,定為0
whileilen(temp):#使用while循環(huán),當(dāng)指針i的值小于列表temp的長(zhǎng)度時(shí),則一直循環(huán)
iftemp[i]=="":#從索引0開始,如果temp[i]為空
deltemp[i]#則刪除該索引對(duì)應(yīng)的值,也就是刪除temp[i]
i-=1#刪除之后,由于列表整體長(zhǎng)度變小了1位(也就是后面的元素都往前提了一位),所以索引i需要減1,以便下次遍歷時(shí)不丟掉挨著的元素
i+=1#判斷完索引i后,給索引自增1,進(jìn)行下一輪判斷
returnlen(temp[-1])#temp所有元素遍歷完成后,就剔除了所有空字符串,取出最后一項(xiàng)的長(zhǎng)度返回即可
方法3:for循環(huán)倒序刪除空字符串
剛才說了使用for循環(huán)時(shí),正向遍歷會(huì)導(dǎo)致溢出或者結(jié)果出錯(cuò),但是從后向前遍歷是可以的
classSolution(object):
deflengthOfLastWord(self,s):
倒序循環(huán)刪除空字符串
:types:str
:rtype:int
ifs.isspace():#判斷s是否只由空格字符組成,如s==""
return0
elifs=="":#判斷s是否為空字符串,如s==""
return0
else:#如果s不為空,且不全是由空格組成
temp=s.split("")#通過split方法,用一個(gè)空格字符將字符串s進(jìn)行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
foriinrange(len(temp)-1,-1,-1):#倒序循環(huán)刪除空字符串
iftemp[i]=="":
deltemp[i]
returnlen(temp[-1])
方法4:拷貝原列表
拷貝原列表,然后遍歷拷貝的列表來找出空字符,最后再原列表中刪除空字符
classSolution(object):
deflengthOfLastWord_3(self,s):
:types:str
:rtype:int
ifs.isspace():#判斷s是否只由空格字符組成,如s=="",用isspace()函數(shù)判斷
return0
elifs=="":#判斷s是否為空字符串,如s==""
return0
else:#如果s不為空,且不全是由空格組成
temp=s.split("")#通過split方法,用一個(gè)空格字符將字符串s進(jìn)行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
foriintemp[:]:#temp[:]是對(duì)原始的temp的一個(gè)拷貝,是一個(gè)新的list,所以,我們遍歷新的list,而刪除原始的list中的元素
ifi=="":
temp.remove(i)
returnlen(temp[-1])
這樣理解一下:假如有一個(gè)列表s=[1,1,2,3,4,4,3,1],現(xiàn)在要把里面的1都刪掉
我們先拷貝s,得到一個(gè)新列表(注意不能用一個(gè)變量直接等于s,如a=s,其實(shí)a和s都指向同一個(gè)列表,本質(zhì)還是一個(gè)),新列表的元素與原列表完全相同
然后遍歷新列表,當(dāng)遇到某個(gè)元素的值為1時(shí),就在原列表中把這個(gè)元素刪掉(使用列表的remove方法刪除),因?yàn)閞emove在刪除元素時(shí),只會(huì)刪掉遇到的第一個(gè)目標(biāo)元素,所以我們繼續(xù)遍歷新列表,如果再遇到1,就繼續(xù)在原列表中刪除,
最終遍歷完新列表,也就會(huì)在原列表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 資產(chǎn)收益權(quán)置換協(xié)議書
- 2025年中級(jí)經(jīng)濟(jì)師之中級(jí)經(jīng)濟(jì)師金融專業(yè)題庫(kù)與答案
- 聘請(qǐng)鍋爐工協(xié)議書
- 征集發(fā)起人協(xié)議書
- 采耳師合作協(xié)議書
- 電動(dòng)車和解協(xié)議書
- 聯(lián)建房共有協(xié)議書
- 腦室內(nèi)給藥協(xié)議書
- 女兒和兒子協(xié)議書
- 試藥員知情協(xié)議書
- 2024年上海市高考語文真題現(xiàn)代文二《斑鳩》簡(jiǎn)析及相關(guān)常規(guī)題型歸納
- 七年級(jí)下冊(cè)英語語法填空專項(xiàng)訓(xùn)練100題含答案5篇
- 配電室火災(zāi)應(yīng)急處置預(yù)案
- 2024年高考英語考前押題密卷(全國(guó)卷1)(含答案與解析)
- 遼寧省盤錦市遼河油田實(shí)驗(yàn)中學(xué)2023-2024學(xué)年九年級(jí)下學(xué)期開學(xué)考試數(shù)學(xué)試題(原卷版)
- 中小學(xué)-預(yù)防性騷擾與性侵害-1-課件
- xx市體育中心設(shè)計(jì)說明
- 2024年江蘇省南通市如皋市中考一模語文試題
- 2024-2030年中國(guó)納米抗體藥物行業(yè)運(yùn)行現(xiàn)狀及發(fā)展行情監(jiān)測(cè)研究報(bào)告
- 如何喚醒孩子學(xué)習(xí)的內(nèi)驅(qū)力
- 跨境電商合伙投資協(xié)議書
評(píng)論
0/150
提交評(píng)論