codewars(python)練習(xí)筆記二:去除字符串中的元音字母

codewars(python)練習(xí)筆記二:去除字符串中的元音字母

題目:

Trolls are attacking your comment section!

A common way to deal with this situation is to remove all of the vowels from the trolls' comments, neutralizing the threat.

Your task is to write a function that takes a string and return a new string with all vowels removed.

For example, the string "This website is for losers LOL!" would become "Ths wbst s fr lsrs LL!".

Note: for this kata y isn't considered a vowel.

題目大意:

你的任務(wù)是編寫(xiě)一個(gè)函數(shù),它接受一個(gè)字符串并返回一個(gè)刪除了所有元音的新字符串。
例如,字符串“This website for for losers LOL!”會(huì)變成“Ths wbst s fr lsrs LL!”。
注意:對(duì)于這個(gè) y不被視為元音。

我的解法:

def disemvowel(string):
    string = string.replace('a','').replace('e','').replace('i','').replace('o','').replace('u','')
    string = string.replace('A','').replace('E','').replace('I','').replace('O','').replace('U','')
    return string

哈哈哈,我承認(rèn)我是個(gè)逗比了,主要是昨天的題給我的印象比較深,第一反應(yīng)就是這樣,哎。

常規(guī)解法:

def disemvowel(string):
    out=[]
    mystring=list(string)
    for i in mystring:
        if i not in ["a","e","i","o","u","A","E","I","O","U"]:
            out.append(i)
    return ''.join(out)

我仔細(xì)想了想,無(wú)論怎么寫(xiě),時(shí)間復(fù)雜度都是m*n, 因?yàn)橹辽倌阋袛鄐tring中的每一個(gè)字母是不是在元音字母中的,無(wú)非是寫(xiě)法上優(yōu)雅不優(yōu)雅。

牛逼解法:

def disemvowel(string):
   return string.translate(None, "aeiouAEIOU")

關(guān)于translate()函數(shù)

translate(table, deletechars="")
str.translate(table, deletechars="")

根據(jù) str 給出的表(包含 256 個(gè)字符)轉(zhuǎn)換 string 的字符, 要過(guò)濾掉的字符放到 deletechars 參數(shù)中 |

以下實(shí)例展示了 translate()函數(shù)的使用方法:

#!/usr/bin/python

from string

intab = "aeiou"
outtab = "12345"
deltab = "thw"
  
trantab = string.maketrans(intab,outtab) # 創(chuàng)建字符映射轉(zhuǎn)換表
  
test = "this is string example....wow!!!";
  
print test.translate(trantab);
print test.translate(trantab,deltab); # Python2中,刪除指定字符在 translate() 方法中

以上實(shí)例輸出結(jié)果如下:

th3s 3s str3ng 2x1mpl2....w4w!!!
3s 3s sr3ng 2x1mpl2....4!!!

translate()是個(gè)翻譯函數(shù),是將制定的字母表intab[]翻譯為對(duì)應(yīng)的映射表outtab[],并刪除deltab[]。是python 的字符串內(nèi)建函數(shù)。

python的字符串內(nèi)建函數(shù)

字符串方法是從python1.6到2.0慢慢加進(jìn)來(lái)的——它們也被加到了Jython中。

這些方法實(shí)現(xiàn)了string模塊的大部分方法,如下表所示列出了目前字符串內(nèi)建支持的方法,所有的方法都包含了對(duì)Unicode的支持,有一些甚至是專(zhuān)門(mén)用于Unicode的。

下面就是從菜鳥(niǎo)筆記中摘過(guò)來(lái)的python 的字符串內(nèi)建函數(shù)表。

方法 描述
string.capitalize() 把字符串的第一個(gè)字符大寫(xiě)
string.center(width) 返回一個(gè)原字符串居中,并使用空格填充至長(zhǎng)度 width 的新字符串
string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出現(xiàn)的次數(shù),如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)
string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式解碼 string,如果出錯(cuò)默認(rèn)報(bào)一個(gè) ValueError 的 異 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'
string.encode(encoding='UTF-8', errors='strict') 以 encoding 指定的編碼格式編碼 string,如果出錯(cuò)默認(rèn)報(bào)一個(gè)ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'
string.endswith(obj, beg=0, end=len(string)) 檢查字符串是否以 obj 結(jié)束,如果beg 或者 end 指定則檢查指定的范圍內(nèi)是否以 obj 結(jié)束,如果是,返回 True,否則返回 False.
string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符號(hào)轉(zhuǎn)為空格,tab 符號(hào)默認(rèn)的空格數(shù)是 8。
string.find(str, beg=0, end=len(string)) 檢測(cè) str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內(nèi),如果是返回開(kāi)始的索引值,否則返回-1
string.format() 格式化字符串
string.index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過(guò)如果str不在 string中會(huì)報(bào)一個(gè)異常.
string.isalnum() 如果 string 至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False
string.isalpha() 如果 string 至少有一個(gè)字符并且所有字符都是字母則返回 True,否則返回 False
string.isdecimal() 如果 string 只包含十進(jìn)制數(shù)字則返回 True 否則返回 False.
string.isdigit() 如果 string 只包含數(shù)字則返回 True 否則返回 False.
string.islower() 如果 string 中包含至少一個(gè)區(qū)分大小寫(xiě)的字符,并且所有這些(區(qū)分大小寫(xiě)的)字符都是小寫(xiě),則返回 True,否則返回 False
string.isnumeric() 如果 string 中只包含數(shù)字字符,則返回 True,否則返回 False
string.isspace() 如果 string 中只包含空格,則返回 True,否則返回 False.
string.istitle() 如果 string 是標(biāo)題化的(見(jiàn) title())則返回 True,否則返回 False
string.isupper() 如果 string 中包含至少一個(gè)區(qū)分大小寫(xiě)的字符,并且所有這些(區(qū)分大小寫(xiě)的)字符都是大寫(xiě),則返回 True,否則返回 False
string.join(seq) 以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個(gè)新的字符串
string.ljust(width) 返回一個(gè)原字符串左對(duì)齊,并使用空格填充至長(zhǎng)度 width 的新字符串
string.lower() 轉(zhuǎn)換 string 中所有大寫(xiě)字符為小寫(xiě).
string.lstrip() 截掉 string 左邊的空格
string.maketrans(intab, outtab) maketrans() 方法用于創(chuàng)建字符映射的轉(zhuǎn)換表,對(duì)于接受兩個(gè)參數(shù)的最簡(jiǎn)單的調(diào)用方式,第一個(gè)參數(shù)是字符串,表示需要轉(zhuǎn)換的字符,第二個(gè)參數(shù)也是字符串表示轉(zhuǎn)換的目標(biāo)。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
string.partition(str) 有點(diǎn)像 find()和 split()的結(jié)合體,從 str 出現(xiàn)的第一個(gè)位置起,把 字 符 串 string 分 成 一 個(gè) 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過(guò) num 次.
string.rfind(str, beg=0,end=len(string) ) 類(lèi)似于 find()函數(shù),不過(guò)是從右邊開(kāi)始查找.
string.rindex( str, beg=0,end=len(string)) 類(lèi)似于 index(),不過(guò)是從右邊開(kāi)始.
string.rjust(width) 返回一個(gè)原字符串右對(duì)齊,并使用空格填充至長(zhǎng)度 width 的新字符串
string.rpartition(str) 類(lèi)似于 partition()函數(shù),不過(guò)是從右邊開(kāi)始查找.
string.rstrip() 刪除 string 字符串末尾的空格.
string.split(str="", num=string.count(str)) 以 str 為分隔符切片 string,如果 num有指定值,則僅分隔 num 個(gè)子字符串
string.splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一個(gè)包含各行作為元素的列表,如果參數(shù) keepends 為 False,不包含換行符,如果為 True,則保留換行符。
string.startswith(obj, beg=0,end=len(string)) 檢查字符串是否是以 obj 開(kāi)頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定范圍內(nèi)檢查.
string.strip([obj]) 在 string 上執(zhí)行 lstrip()和 rstrip()
string.swapcase() 翻轉(zhuǎn) string 中的大小寫(xiě)
string.title() 返回"標(biāo)題化"的 string,就是說(shuō)所有單詞都是以大寫(xiě)開(kāi)始,其余字母均為小寫(xiě)(見(jiàn) istitle())
string.translate(str, del="") 根據(jù) str 給出的表(包含 256 個(gè)字符)轉(zhuǎn)換 string 的字符,要過(guò)濾掉的字符放到 del 參數(shù)中
string.upper() 轉(zhuǎn)換 string 中的小寫(xiě)字母為大寫(xiě)
string.zfill(width) 返回長(zhǎng)度為 width 的字符串,原字符串 string 右對(duì)齊,前面填充0
string.isdecimal() isdecimal()方法檢查字符串是否只包含十進(jìn)制字符。這種方法只存在于unicode對(duì)象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容