Master Ruby, либо скопировать список и делать изменения в нем, либо проще всего было бы сделать от обратного: создать новый пустой список и добавлять в него элементы, если они не int
['a', 1, 2, 'c']
После того как ты удалил 1, 2 встанет на его место. Но этот элемент уже был обработан, и цикл пойдёт дальше, к 'c'.
Если тебе нужно удалять элементы из списка в процессе итерации, итерируйся начиная с конца. Тогда будет меняться только позиция уже обработанных элементов.
И делай итерацию не напрямую по списку, а по индексу.
Dr. Bacon, в большинстве случаев проще, да. Но если очень хочется, например, если список длинный... И фокус в том, что всё равно итерацию придётся делать по индексу. А там будет куда проще.