Не рекомендуется мутировать элемент списка, пока вы зацикливаетесь на нем.
a = ['aaaaa', '@someword', '@otherword','bbbb']
for index,word in enumerate(a):
print(index, word)
if '@' in word:
a.remove(word)
print(a)
Вывод этого
(0, 'aaaaa')
(1, '@someword')
['aaaaa', '@otherword', 'bbbb']
(2, 'bbbb')
Из этого вы можете видеть, что«@someword» удален, и элемент в индексе 2 больше не является «@otherword», теперь он «bbbb».Поэтому «@otherword» не может быть удалено.
Второй приведенный вами пример работает, поскольку при удалении «@someword» элемент с индексом 2 становится «@otherword», поэтому его можно удалить на следующей итерации.
(0, 'aaaaa')
(1, '@someword')
['aaaaa', 'qqqq', '@otherword', 'bbbb']
(2, '@otherword')
['aaaaa', 'qqqq', 'bbbb']
Я посоветую вам создать новый список и просто сохранить в нем элементы, не содержащие '@'
a = ['aaaaa', '@someword', 'qqqq', '@otherword','bbbb']
new_list = [i for i in a if '@' not in i]
print(new_list) # ['aaaaa', 'qqqq', 'bbbb']