Вы создаете два списка, так почему бы не удалить из одного из них?
even = [1, 2, 3, 4]
odd = []
for i in reversed(range(len(even))):
if even[i] % 2 != 0:
odd.insert(0, even.pop(i))
pop
удаляет из первого, а insert(0, ...)
добавит его в начало (вего правильное положение).Кроме того, вы перебираете b
в обратном порядке, как это обычно происходит с идиомой reverse-delete .
В результате вы получите b
и c
, как и раньше.Сложность, однако, все та же.
Если порядок не важен, измените odd.insert(0, even.pop(i))
на odd.append(even.pop(i))
, что немного легче читать.