Как удалить найденные endswith элементы?

Согласно примеру должны были удалиться 11 и 211 элементы списка:

a = [1, 11, 21, 31, 211, 221]
s=len(a)

s=len(a)
for i in range(s):
    if str(a[i]).endswith('11'):
        # print(a[i])  - чтобы показать, что элементы есть в списке 
        a.remove(a[i])
print(a)

IndexError: list index out of range


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

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

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

Чтобы это обойти, нужно делать обход в обратном порядке:

a = [1, 11, 21, 31, 211, 221]

for i in reversed(range(len(a))):
    if str(a[i]).endswith('11'):
        a.remove(a[i])

print(a)
# [1, 21, 31, 221]
→ Ссылка
Автор решения: eri

Лучше использовать фильтры.

a = [1, 11, 21, 31, 211, 221]
a = filter( lambda x: not str(x).endswith('11'), a )
print(list(a))
→ Ссылка