Как правильно удалить дубликаты слов в строке
Дана строка question "Python is best I love python" нужно вывести строку без дуплей соответственно без последнего слова но у меня где то теряется "Ай"
x,n = input().split(),[]
for i in range(len(x)):
if x[i].lower() not in str(n).lower():
n.append(x[i])
print(*n)
и на выходе получаю "Python is best love".
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Лучше завести множество с использованными словами, с помощью которого проверять повторы.
x,n = input().split(),[]
used = set()
for s in x:
if s.lower() not in used:
n.append(s)
used.add(s.lower())
print(*n)
Python is best I love python
Python is best I love
Пояснения о пропаже I.
У вас I пропала, потому что вы ищете совпадения в строковом представлении всего списка, а не в отдельных элементов списка.
Если распечатать на каждой итерации str(n), то выведутся строки
['Python']
['Python', 'is'] # в этой строке есть i
['Python', 'is', 'best'] # в этой строке есть i
['Python', 'is', 'best'] # в этой строке есть i
['Python', 'is', 'best', 'love']
Поэтому результат проверки if x[i].lower() not in str(n).lower(): или, конкретно, if 'i' not in "['Python', 'is', 'best']": будет ложным и I не добавится в список.