Skip to main content
 首页 » 编程设计

python之如何检测字符串后缀并从列表中删除这些后缀元素之Python

2025年05月04日27kevingrace

如何检测字符串后缀并从列表中删除这些带后缀的元素? 我知道这看起来像 NLP、词干提取/词形还原任务,但该任务需要更简单的函数。

假设,如果列表中存在非后缀项,我需要删除具有 s 和 es 后缀的元素:

alist = ['bar','barbar','foo','foos','barbares','foofoos','bares'] 

我需要输出:

alist = ['bar','barbar','foo','foofoos'] 

我已经尝试了以下但它不起作用,因为当我整理列表时,它得到 ['bar', 'barbar', 'barbares', 'bares', 'foo', ' foofoos', 'foos'] 不是 ['bar', 'bares', 'barbar', 'barbares', 'foo', 'foos', 'foofoos']

alist = ['bar','barbar','foo','foos','barbares','foofoos','bares'] 
 
prev = "" 
no_s_list = [] 
for i in sorted(alist): 
  if i[-2:] == "es" and i[:-2] == prev: 
    continue 
  elif i[-1:] == "s" and i[:-1] == prev: 
    contine 
  else: 
    prev = i 
    no_s_list.append(i) 

以上输出:

>>> sorted(alist) 
['bar', 'barbar', 'barbares', 'bares', 'foo', 'foofoos', 'foos'] 

请您参考如下方法:

def rm_suffix(s,suffixes): 
    for suf in suffixes: 
       if s.endswith(suf): 
          return s[:-len(suf)] 
    return s 
 
alist = ['bar','barbar','foo','foos','barbares','foofoos','bares'] 
salist = set(alist) 
suffixes = ('es','s') 
blist = [x for x in alist  
         if (not x.endswith(suffixes)) or (rm_suffix(x,suffixes) not in salist)] 
print blist  # ['bar', 'barbar', 'foo', 'foofoos']