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

Python 如何从单词列表中删除相似的单词?,python,list,duplicates,Python,List,Duplicates,从上面的列表中你可以看到Das和Hima Das在重复。我只想要Hima Das的全名。与Usha和PT Usha类似 o/p我需要什么 list1=['Usha', 'Das', 'Anas', 'Chand', 'Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'the As

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

o/p我需要什么

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']

可能是列表理解+
任何

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

可能是列表理解+
任何

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

从列表中包含多个单词的每个元素中创建一组单独的单词

然后使用列表理解来筛选完全在该集合中的元素

此解决方案是
O(n)
,这是您在效率方面所能做的最好的解决方案(比只检查列表要好,因为它是
O(n^2)


从列表中包含多个单词的每个元素中创建一组单独的单词

然后使用列表理解来筛选完全在该集合中的元素

此解决方案是
O(n)
,这是您在效率方面所能做的最好的解决方案(比只检查列表要好,因为它是
O(n^2)


我通过使用图书馆解决了一个类似的问题。它将返回与列表中的其他项目相似的单词,这些单词基于许多因素

all_name=['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 Olympic']
对于列表1中的名称:
matches=fuzzy.extractBests(名称,列表1)
从这里,您可以在匹配列表中找到最长的匹配项,并将其视为您的“候选”匹配项。e、 g“Das”将在某种程度上匹配“Hima Das”,因此它们将被返回,并根据长度选择“Hima Das”


然后将候选匹配项添加到集合中,以确保它们是唯一的。

我使用该库解决了一个类似的问题。它将返回与列表中的其他项目相似的单词,这些单词基于许多因素

all_name=['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 Olympic']
对于列表1中的名称:
matches=fuzzy.extractBests(名称,列表1)
从这里,您可以在匹配列表中找到最长的匹配项,并将其视为您的“候选”匹配项。e、 g“Das”将在某种程度上匹配“Hima Das”,因此它们将被返回,并根据长度选择“Hima Das”

然后将候选匹配项添加到集合中,以确保它们是唯一的。

使用for循环:

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]
使用列表理解:

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']

uniques = []

for i in list1:
   if i not in uniques:
      uniques.append(i)
print(uniques)
使用for循环:

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]
使用列表理解:

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']

uniques = []

for i in list1:
   if i not in uniques:
      uniques.append(i)
print(uniques)

请注意,对于大型输入列表,这比使用集合慢得多。请注意,对于大型输入列表,这比使用集合慢得多。