繁体   English   中英

有条件地从python列表中的单词中删除后缀

[英]Conditional Removal of suffix from words in a python list

我必须执行的任务如下:

假设我有一个单词列表(仅举一个例子...该列表可以包含任何单词):

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

我要创建从其中具有后缀单词的新列表ing去除后缀(即yeasting被添加到新的列表作为酵母)后,并将该剩余的词被添加,因为它是

现在,就插入以ing结尾的字符串而言,我编写了以下代码,它可以正常工作

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

但是如何将剩余的单词添加到列表中呢? 如何在上述if语句中添加else子句? 我找不到上述合适的文档。 我确实在SO上遇到过几个有关速记if语句的问题,但是仅仅在上述代码的末尾添加else语句是行不通的。 我该怎么办?

其次,如果我必须将上述正则表达式扩展为多个后缀,请说如下:

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

如何执行“修剪”操作以相应地删除后缀,同时将单词添加到新列表中? 请帮忙。

关于第一个问题,可以在for之前使用三元 for

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

关于您的第二个问题,我认为最好的答案是使用@abarnert演示的re.sub 但是,您也可以对re.search的使用进行一些调整:

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

最后,这是有关理解的更多信息的链接。

首先,是什么让您认为根本不需要正则表达式? 有更简单的方法来删除后缀。

其次,如果要使用正则表达式,为什么不只使用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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM