Оставить в слове вхождения только первой буквы
Дано предложение.
Задача: Напечатать все слова, предварительно преобразовав каждое из них по следующему правилу: оставить в слове только первые вхождения каждой буквы.
Пробую реализовать:
sentence=[str(i) for i in input().split()]
for i in range(0, len(sentence)):
items = list(sentence[i])
for j in range(0, len(items)): #перебираем буквы слова
if items.count(items[j])>1: #если этой буквы больше чем 1
index=items.find(items[j]) #запоминаем индекс
first_letter=items[index] #запоминаем эту букву
for k in range(0, len(items)-2): #удаляем циклом эти буквы
if items[k]==items[index]:
items.remove(items[k])
else:
continue
else:
continue
items.insert(index,first_letter) #вставляем первое вхождение на его место
sentence[i] = ''.join(items) #заполняем масив предложения
print(*sentence)
Выбивает ошибку:
'list' object has no attribute 'find'
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
def f(string):
words = string.split()
new_words = []
for i in range(len(words)):
new_word = ''
for j in range(len(words[i])):
if words[i][j] not in words[i][0:j]:
new_word += words[i][j]
new_words.append(new_word)
return ' '.join(new_words)
Автор решения: n1tr0xs
→ Ссылка
Python-style:
words = input().split()
new_words = [''.join(sorted(set(word), key=lambda el: word.index(el))) for word in words]
print(new_words)