python刪除列表中特定元素的幾種方法_第1頁(yè)
python刪除列表中特定元素的幾種方法_第2頁(yè)
python刪除列表中特定元素的幾種方法_第3頁(yè)
python刪除列表中特定元素的幾種方法_第4頁(yè)
python刪除列表中特定元素的幾種方法_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論