Вы делаете две итерации в своем коде, по одной для каждой строки в файле, а внутри вы делаете по одной для каждого элемента в списке, поэтому, получив ваш пример, мы будем иметь:
Итерация 01:
list_elements = ['aaa', 'bbb', 'ccc']
line = 'aaa'
key = ['aaa']
Inside this iteration another one is going to happen, so:
- Iteration 01:
i = 'aaa'
i is in key, no element removed.
- Iteration 02:
i = 'bbb'
i is NOT in key, 'bbb' gets removed.
Finished iteration because an element was removed from the list
list_elements = ['aaa', 'ccc']
line = 'ccc'
key = ['ccc']
Inside this iteration another one is going to happen, so:
- Iteration 01:
i = 'aaa'
i is NOT in key, 'aaa' gets removed INCORRECTLY.
Iterator finished.
Я предлагаю вам изменить способ удаления данные из вашего списка, вместо того, чтобы редактировать список, который вы повторяете по нему, создайте новый с данными, которые вы фактически собираетесь использовать:
listELEMENTS = ['aaa', 'bbb', 'ccc']
used_elements = []
with open("elements.txt") as f:
file_content = f.read().splitlines()
for i in listELEMENTS:
if i in file_content:
used_elements.append(i)
print(used_elements)