Как удалить найденные 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))