消除列表中的重复字谜
eliminate duplicate anagram in a list
s = ['4', 'poke', 'aaagmnrs', 'pkoe', 'okpe', 'ekop', 'anagrams']
final_list = []
for i in range(0, len(s)):
for j in range(i+1, len(s)):
if sorted(s[i]) == sorted(s[j]):
if s[i] not in final_list:
final_list.append(s[i])
print(final_list)
我得到这个输出
['poke', 'aaagmnrs', 'pkoe', 'okpe']
我需要这个输出
['poke', 'aaagmnrs']
如果列表中有多个项目是列表中较早项目的变位词,我基本上只需要第一次出现。例如 'poke' 出现在 'pkoe'、'okpe' 和 'ekop' 之前,我只需要输出列表中的 'poke'。与 'aaagmnrs' 相同。由于 'aaagmnrs' 出现在 'anagrams' 之前,我只需要 'aaagmnrs' 在输出中。
考虑保留找到的变位词的排序版本列表,然后检查该排序字符串列表是否包含排序字符串。如果需要,您也可以在完成将项目添加到列表后在列表中找到匹配项时从内部循环中断:
s = ['4', 'poke', 'aaagmnrs', 'pkoe', 'okpe', 'ekop', 'anagrams']
final_list = []
final_list_sorted = []
for i in range(0, len(s)):
sortedi = sorted(s[i])
for j in range(i+1, len(s)):
if sortedi == sorted(s[j]):
if sortedi not in final_list_sorted:
final_list.append(s[i])
final_list_sorted.append(sortedi)
break
print(final_list)
['poke', 'aaagmnrs']
s = ['4', 'poke', 'aaagmnrs', 'pkoe', 'okpe', 'ekop', 'anagrams']
final_list = []
for i in range(0, len(s)):
for j in range(i+1, len(s)):
if sorted(s[i]) == sorted(s[j]):
if s[i] not in final_list:
final_list.append(s[i])
print(final_list)
我得到这个输出
['poke', 'aaagmnrs', 'pkoe', 'okpe']
我需要这个输出
['poke', 'aaagmnrs']
如果列表中有多个项目是列表中较早项目的变位词,我基本上只需要第一次出现。例如 'poke' 出现在 'pkoe'、'okpe' 和 'ekop' 之前,我只需要输出列表中的 'poke'。与 'aaagmnrs' 相同。由于 'aaagmnrs' 出现在 'anagrams' 之前,我只需要 'aaagmnrs' 在输出中。
考虑保留找到的变位词的排序版本列表,然后检查该排序字符串列表是否包含排序字符串。如果需要,您也可以在完成将项目添加到列表后在列表中找到匹配项时从内部循环中断:
s = ['4', 'poke', 'aaagmnrs', 'pkoe', 'okpe', 'ekop', 'anagrams']
final_list = []
final_list_sorted = []
for i in range(0, len(s)):
sortedi = sorted(s[i])
for j in range(i+1, len(s)):
if sortedi == sorted(s[j]):
if sortedi not in final_list_sorted:
final_list.append(s[i])
final_list_sorted.append(sortedi)
break
print(final_list)
['poke', 'aaagmnrs']