3 回答
TA贡献1818条经验 获得超11个赞
我使用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”。
然后将候选匹配项添加到集合中以确保它们是唯一的。
TA贡献1856条经验 获得超5个赞
使用多个单词从列表中的每个元素创建一组单个单词。
然后使用列表理解来过滤完全在该集合中的元素。
此解决方案是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]
TA贡献1804条经验 获得超8个赞
也许是列表理解 + any
:
print([i for i in list1 if not any(i in x and i!=x for x in list1)])
添加回答
举报