устранить дубликаты анаграммы в списке - PullRequest
0 голосов
/ 24 октября 2019
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» встречается до «анаграмм», мне нужны только «aaagmnrs» в выходных данных.

1 Ответ

0 голосов
/ 24 октября 2019

Подумайте о том, чтобы сохранить список отсортированной версии найденной анаграммы, а затем проверить, содержит ли этот список отсортированных строк отсортированную строку. Вы также можете выйти из внутреннего цикла, когда найдете соответствующий элемент в списке после того, как добавите его в списки, если необходимо:

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