почему remove не удаляет последний элемент?

Условие: У вас есть текст и список слов. Вам необходимо проверить, отображаются ли слова в списке в том же порядке, что и в данном тексте.

Случаи, которые вы должны ожидать при решении этой задачи:

слово из списка отсутствует в тексте - ваша функция должна возвращать False; любое слово может встречаться в тексте более одного раза - используйте только первое; два слова одинаковы - ваша функция должна возвращать False; условие чувствительно к регистру, что означает «привет» и «привет» - два разных слова. текст включает только английские буквы и пробелы

def words_order(text: str, words: list) -> bool:
    # your code here
    text = text.split(' ')
    for t in text:
        if t not in words:
           text.remove(t)
        elif text.count(t)>1:
            text.remove(t)
    if text == words:
        return True
    else:
        return False


assert words_order('hi world im here', ['world']) == True

Если распечатать text и words то в списке text по какой-то причине появляется here хотя должно остаться только слово world и результат должен быть true , в чем может быть ошибка?


Ответы (2 шт):

Автор решения: Whatis

Таким способом все получилось, но все же если кто-нибудь знает , почему не работало предыдущее решение , подскажите пожалуйста .

def words_order(text: str, words: list) -> bool:
        # your code here
        text = text.split(' ')
        # for t in text:
        #     print(t)
        new_text = []
        while text:
            word = text.pop()
            if word in words:
                new_text.append(word)
            elif text.count(word)>1:
                text.remove(word)
        new_text = new_text[::-1]
        if new_text == words:
            return True
        else:
            return False
→ Ссылка
Автор решения: Эникейщик

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

Решение: создать новый список (как у вас в ответе) или идти по списку с конца:

for t in text[::-1]:
→ Ссылка