2013-12-18 57 views
0

,我必須執行的任務如下:條件去除

說我有話(只是一個例子......名單可以有任何的字)的列表:

'yappingly', 'yarding', 'yarly', 'yawnfully', 'yawnily', 'yawning','yawningly', 
'yawweed', 'yealing', 'yeanling', 'yearling', 'yearly', 'yearnfully','yearning', 
'yearnling', 'yeastily', 'yeasting', 'yed', 

我要創建從其中去除所述後綴(即yeasting被添加到新的列表作爲酵母)之後添加具有後綴ing字和剩餘的詞被添加,因爲它是字的新列表

現在就串的插入結束與ing來講,我寫了下面的代碼,它工作正常

Data=[w[0:-3] for w in wordlist if re.search('ing$',w)] 

但如何將餘下的字添加到列表中?如何在上面的if語句中添加else子句?我無法找到適合上述的文檔。我確實遇到過幾個有關速記if else語句的問題,但在上述代碼末尾添加else語句不起作用。我如何去做?

其次,如果我要延長多個後綴上述正則表達式表示如下:

re.search('(ing|ed|al)$',w) 

如何進行「微調」操作來相應地刪除後綴,同時將單詞添加到新名單?? 請幫助。

回答

2

首先,是什麼讓你覺得你需要一個正則表達式呢?有更簡單的方法去除後綴。

第二,如果你想使用正則表達式,爲什麼不只是re.sub,而不是試圖用正則表達式和切片一起?例如:

Data = [re.sub('(ing|ed|al)$', '', w) for w in wordlist] 

那麼你不需要工作了多少切掉(這需要你跟蹤re.search結果的,所以你可以拿到小組第一的長度,而不是隻把它變成一個布爾)。

但如果你真的想要做的事情你的方式,只是一個條件表達式替換你if過濾器,如iCodez的答案。

最後,如果你被困在如何適應東西放到一行代碼,只是把它拿出來一襯墊。編寫一個strip_suffixes函數應該很容易,該函數返回後綴已剝離的字符串(如果沒有後綴,則爲原始字符串)。然後,你可以這樣寫:

Data = [strip_suffixes(w) for w in wordlist] 
+0

@iCodez:Fixed;謝謝。 – abarnert

+0

謝謝..顯然,會有更簡單和優雅的方法來執行上述任務。這只是我正在學習如何在python中使用正則表達式,所以我認爲更重視正則表達式的使用是合理的。 :) – alphacentauri

+1

@alphacentauri:如果你這樣做是爲了瞭解Python中的正則表達式,我肯定會建議編寫'strip_suffixes'函數,這樣你就可以用不同的方式編寫它 - 使用're.sub',使用're。搜索「,然後獲得匹配組的長度,無論您想不到。 – abarnert

3

關於你的第一個問題,你可以使用一個ternary只是for之前放置:

Data=[w[0:-3] if re.search('ing$',w) else w for w in wordlist] 

關於你的第二個,好了,在我看來,最好的答案是使用re.sub爲@abarnert證明。但是,你也可以做一個小的適應您使用的re.search

Data=[re.search('(.*)(?:ing|ed|al)$', w).group(1) for w in wordlist] 

最後,這裏是對comprehensions更多信息的鏈接。

+0

Ahhh..Thanks ......這個工作.. 任何建議,我可以閱讀有關,如果這些語法不那麼直觀蟒蛇?我找不到一個令人信服的來源 – alphacentauri

+0

@alphacentauri - 我在答案中給出的鏈接解釋了三元組。這裏是關於[comprehensions]的參考(http://www.openlogic.com/wazi/bid/306769/Python-comprehensions-for-sysadmins)。 – iCodez

+1

@alphacentauri:[PEP 308](http://www.python.org/dev/peps/pep-0308/)描述了條件表達式。 [教程](http://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)描述了列表解析(和['if'語句]中的'if'子句(http:// docs。 python.org/3/tutorial/controlflow.html#if-statements),如果你對這些問題感到困惑,也不要打擾)。 – abarnert