Kat*_*iel 14

没有更多信息,就无法回答你的问题.正如您所说,您希望从可迭代中删除重复项.你可以这样做itertools.groupby:

>>> "".join(c for c, _ in groupby("yeeessssss"))
'yes'
Run Code Online (Sandbox Code Playgroud)

当然,这将删除所有重复:

>>> dedupe = lambda s: "".join(c for c, _ in groupby(s))
>>> dedupe("hello")
'helo'
>>> dedupe("Mississippi")
'Misisipi'
Run Code Online (Sandbox Code Playgroud)

我认为你的问题可能要困难得多; 即,如何将可能具有重复字母的单词标准化为实际的英语单词.这基本上不可能精确地做 - 什么会成为beeeeeeefeeeed将成为什么? - 但是,经过很多努力,你可以通过各种启发式方法来近似它.

一个简单的方法是查看单词是否在字典中,如果没有,则一次删除一个重复的字母,直到它为止.这将是非常低效的,但可能会奏效.

另一种方法是使用自然语言库将单词转换为某种"正常形式".这可能是它的声音,拼写方式或其他内容.然后,您可以找到与该普通表单最接近的单词,并使用来表示您的重复数据删除单词.

另一种方法是在字符串之间定义某种"修改距离",其中为每个操作"删除字符","插入字符"和"修改字符"分配固定成本.然后,您可以根据此指标计算与输入最接近的单词.这是一个经过充分研究的问题,因为它被用于生物信息学,并且有一种优雅的动态编程方法.不幸的是,锻炼也很困难(一个相关的问题是我本科学位课程的几周课程).


; TL,博士

只需删除重复项就很容易了.找到最好的近似值作为英语单词是非常难的.