猿问

如何从单词列表中删除相似的单词?

list1=['Usha', 'Das', 'Anas', 'Chand', 'Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'the Asian Games', 'Asian Games', 'Olympic Games']

从上面的列表中可以看到Das和Hima Das在重复。我只想要全名是Hima Das。与 Usha 和 PT Usha 类似。

o/p 我需要什么

['Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'Asian Games', 'Olympic Games']



婷婷同学_
浏览 164回答 3
3回答

慕尼黑8549860

我使用Fuzzy Wuzzy库解决了类似的问题。它将根据多种因素返回与列表中其他项目相似的单词。all_names=['Usha', 'Das', 'Anas', 'Chand', 'Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'the Asian Games', 'Asian Games', 'Olympic Games']for name in list1:    matches = fuzzy.extractBests(name, list1)从这里您可以找到匹配列表中最长的匹配并将其视为您的“候选”匹配。例如,“Das”将在一定程度上匹配“Hima Das”,因此它们将被返回,并根据长度选择“Hima Das”。然后将候选匹配项添加到集合中以确保它们是唯一的。

RISEBY

使用多个单词从列表中的每个元素创建一组单个单词。然后使用列表理解来过滤完全在该集合中的元素。此解决方案是O(n)您在效率方面可以做到的最佳解决方案(比仅按原样检查列表更好O(n^2))。parts = {w for e in list1 if ' ' in e for w in e.split()}out = [e for e in list1 if e not in parts]

胡说叔叔

也许是列表理解 + any:print([i for i in list1 if not any(i in x and i!=x for x in list1)])
随时随地看视频慕课网APP

相关分类

Python
我要回答