欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python刪除列表中特定元素的幾種方法

 更新時間:2022年05月20日 09:11:23   作者:Python熱愛者  
這篇文章主要介紹了python刪除列表中特定元素的幾種方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價價值,需要的小伙伴可以參考一下

前言

題目如下:

給定一個僅包含大小寫字母和空格 ’ ’ 的字符串 s,返回其最后一個單詞的長度。如果字符串從左向右滾動顯示,那么最后一個單詞就是最后出現(xiàn)的單詞。

如果不存在最后一個單詞,請返回 0 。

說明:一個單詞是指僅由字母組成、不包含任何空格字符的 最大子字符串。

示例:

輸入: "Hello World"
輸出: 5

思路

題目要求給一個字符串s,s僅包含字母和空格字符,要求返回最后一個單詞的長度,考慮如下幾點:

  • 1、如果s是空字符,即s=“”,此時應(yīng)該返回0;
  • 2、如果s只包含空格字符,即s=" ",此時也應(yīng)該返回0;
  • 3、如果s既包含字母也包含空格(或者只包含字母),可以通過split()函數(shù),用一個空格字符切割,這樣就可以得到一個列表,這個列表只由連續(xù)的字母和空字符組成,然后把列表中的所有空字符刪除,最后把列表中的最后一項的長度返回即可;

所以現(xiàn)在的問題就轉(zhuǎn)化為:如何刪除一個列表中的特定元素,這里的話,就是刪除列表中的空字符,即""

方法1

借助一個臨時列表,把非空元素提取到臨時列表中,然后取出臨時列表最后一項,返回其長度即可

這是最笨的方法,實際運行時也是最耗時的方法:

class Solution(object):
def lengthOfLastWord(self, s):
"""
:type s: str
:rtype: int
"""
if s.isspace(): # 判斷s是否只由空格字符組成,如s==" "
return 0
elif s == "": # 判斷s是否為空字符串,如s==""
return 0
else: # 如果s不為空,且不全是由空格組成
temp = s.split(" ") # 通過split方法,用一個空格字符將字符串s進行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
new = [] # 定義一個空列表,作為中間變量
for t in temp: # 遍歷temp,把非空元素提取到new中,最后把new的最后一項的長度返回即可
if t != "":
new.append(t)
return len(new[-1])

在說方法2之前,說一個錯誤的方法:使用for循環(huán),正向遍歷列表,刪除其中的空字符,

如下:

s = ["","","a", "a", "a","","",""]
for i in range(0,len(s)):
if s[i] == "":
del s[i]
print(s)

運行上述代碼,會報錯:

原因是當(dāng)遇到空字符時,把空字符刪掉后,列表長度變小了,但是循環(huán)遍歷時,還是按照最初的長度遍歷,導(dǎo)致溢出;

另外這樣寫還存在一個弊端:可能會漏刪某些空字符,原因是當(dāng)刪掉前面的空字符后,后面的元素依次向前移動,導(dǎo)致索引與原先對應(yīng)的值發(fā)生變化,

如下:

b = ["","","a", "a", "a","","",""]
for i in range(0,len(b)):
if i >= len(b): # 加一個判斷,當(dāng)i大于列表長度時,跳出循環(huán),避免報錯
break
if b[i] == "":
del b[i]
print(b)

所以我們在解決這個問題前,不能用for循環(huán)來正向遍歷列表

方法2:使用while循環(huán)

因為for循環(huán)無法達到目的,所以考慮使用while循環(huán),如下:

class Solution(object):
def lengthOfLastWord(self, s):
"""
:type s: str
:rtype: int
"""
if s.isspace(): # 判斷s是否只由空格字符組成,如s==" "
return 0
elif s == "": # 判斷s是否為空字符串,如s==""
return 0
else: # 如果s不為空,且不全是由空格組成
temp = s.split(" ") # 通過split方法,用一個空格字符將字符串s進行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
i = 0 # 設(shè)置初始指針,定為0
while i < len(temp): # 使用while循環(huán),當(dāng)指針i的值小于列表temp的長度時,則一直循環(huán)
if temp[i] == "": # 從索引0開始,如果temp[i]為空
del temp[i] # 則刪除該索引對應(yīng)的值,也就是刪除temp[i]
i -=1 # 刪除之后,由于列表整體長度變小了1位(也就是后面的元素都往前提了一位),所以索引i需要減1,以便下次遍歷時不丟掉挨著的元素
i += 1 # 判斷完索引i后,給索引自增1,進行下一輪判斷
return len(temp[-1]) # temp所有元素遍歷完成后,就剔除了所有空字符串,取出最后一項的長度返回即可

方法3:for循環(huán)倒序刪除空字符串

剛才說了使用for循環(huán)時,正向遍歷會導(dǎo)致溢出或者結(jié)果出錯,但是從后向前遍歷是可以的

class Solution(object):
def lengthOfLastWord(self, s):
"""
倒序循環(huán)刪除空字符串
:type s: str
:rtype: int
"""
if s.isspace(): # 判斷s是否只由空格字符組成,如s==" "
return 0
elif s == "": # 判斷s是否為空字符串,如s==""
return 0
else: # 如果s不為空,且不全是由空格組成
temp = s.split(" ") # 通過split方法,用一個空格字符將字符串s進行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
for i in range(len(temp)-1, -1, -1): # 倒序循環(huán)刪除空字符串
if temp[i] == "":
del temp[i]
return len(temp[-1])

方法4:拷貝原列表

拷貝原列表,然后遍歷拷貝的列表來找出空字符,最后再原列表中刪除空字符

class Solution(object):
def lengthOfLastWord_3(self, s):
"""
:type s: str
:rtype: int
"""
if s.isspace(): # 判斷s是否只由空格字符組成,如s==" ",用isspace()函數(shù)判斷
return 0
elif s == "": # 判斷s是否為空字符串,如s==""
return 0
else: # 如果s不為空,且不全是由空格組成
temp = s.split(" ") # 通過split方法,用一個空格字符將字符串s進行切割,可以得到由單詞和空字符串組成的列表,將列表賦給temp
for i in temp[:]: # temp[:]是對原始的temp的一個拷貝,是一個新的list,所以,我們遍歷新的list,而刪除原始的list中的元素
if i == "":
temp.remove(i)
return len(temp[-1])

這樣理解一下:假如有一個列表s = [1,1,2,3,4,4,3,1],現(xiàn)在要把里面的1都刪掉

我們先拷貝s,得到一個新列表(注意不能用一個變量直接等于s,如a=s,其實a和s都指向同一個列表,本質(zhì)還是一個),新列表的元素與原列表完全相同

然后遍歷新列表,當(dāng)遇到某個元素的值為1時,就在原列表中把這個元素刪掉(使用列表的remove方法刪除),因為remove在刪除元素時,只會刪掉遇到的第一個目標(biāo)元素,所以我們繼續(xù)遍歷新列表,如果再遇到1,就繼續(xù)在原列表中刪除,

最終遍歷完新列表,也就會在原列表中把所有1都刪掉了

上述代碼中的temp[:]是拷貝原列表得到新列表的一個方法,也可以通過如下方法復(fù)制得到一個新列表

>>> new_temp = temp[:]
>>> new_temp = list(temp)
>>> new_temp = temp*1
>>> import copy
>>> new_temp = copy.copy(temp)

到此這篇關(guān)于python刪除列表中特定元素的幾種方法的文章就介紹到這了,更多相關(guān)python刪除列表元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python檢測遠程端口是否打開的方法

    python檢測遠程端口是否打開的方法

    這篇文章主要介紹了python檢測遠程端口是否打開的方法,實例分析了Python基于socket檢測端口的技巧,需要的朋友可以參考下
    2015-03-03
  • Python生成器定義與簡單用法實例分析

    Python生成器定義與簡單用法實例分析

    這篇文章主要介紹了Python生成器定義與簡單用法,結(jié)合實例形式較為詳細的分析了Python生成器的概念、原理、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-04-04
  • Python判斷文件和文件夾是否存在的方法

    Python判斷文件和文件夾是否存在的方法

    這篇文章主要介紹了Python判斷文件和文件夾是否存在的方法,本文還講解了判斷是否為文件或者目錄的方法、os.path.lexist的作用、FTP中判斷文件或目錄是否存在等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 基于Python制作一個簡單的文章搜索工具

    基于Python制作一個簡單的文章搜索工具

    這篇文章主要為大家詳細介紹了如何基于Python制作一個簡單的文章搜索工具,都是一些基礎(chǔ)的應(yīng)用,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-05-05
  • opencv+tesseract實現(xiàn)驗證碼識別的示例

    opencv+tesseract實現(xiàn)驗證碼識別的示例

    本文主要介紹了opencv+tesseract實現(xiàn)驗證碼識別的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Swin?Transformer模塊集成到Y(jié)OLOv5目標(biāo)檢測算法中實現(xiàn)

    Swin?Transformer模塊集成到Y(jié)OLOv5目標(biāo)檢測算法中實現(xiàn)

    這篇文章主要為大家介紹了Swin?Transformer模塊集成到Y(jié)OLOv5目標(biāo)檢測算法中實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • python人工智能深度學(xué)習(xí)算法優(yōu)化

    python人工智能深度學(xué)習(xí)算法優(yōu)化

    這篇文章主要為大家介紹了python人工智能深度學(xué)習(xí)關(guān)于算法優(yōu)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Python實現(xiàn)矩陣可視化的示例代碼

    Python實現(xiàn)矩陣可視化的示例代碼

    matplotlib中提供了兩個矩陣可視化函數(shù),分別是imshow和matshow,本文主要為大家詳細介紹了如何使用這兩個函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 如何在PyCharm中配置使用Anaconda環(huán)境

    如何在PyCharm中配置使用Anaconda環(huán)境

    這篇文章主要介紹了如何在PyCharm中配置使用Anaconda環(huán)境,圖文講解寫的非常詳細簡單易懂,還不會的小伙伴快來看看吧
    2023-03-03
  • Django框架獲取form表單數(shù)據(jù)方式總結(jié)

    Django框架獲取form表單數(shù)據(jù)方式總結(jié)

    這篇文章主要介紹了Django框架獲取form表單數(shù)據(jù)方式總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04

最新評論