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

alv*_*vas 1 python string list

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

给定,如果列表中存在非后缀项,我需要删除具有ses后缀的元素:

alist = ['bar','barbar','foo','foos','barbares','foofoos','bares']
Run Code Online (Sandbox Code Playgroud)

我需要输出:

alist = ['bar','barbar','foo','foofoos']
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下但是它不起作用,因为当我整理出来时,它['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)
Run Code Online (Sandbox Code Playgroud)

以上输出:

>>> sorted(alist)
['bar', 'barbar', 'barbares', 'bares', 'foo', 'foofoos', 'foos']
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 7

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']
Run Code Online (Sandbox Code Playgroud)