2013-12-18 53 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