Удаление элементов списка по условию

Допустим, у нас есть список чисел, из которого надо удалить элементы, удовлетворяющие определенному условию. Будем удалять из списка, состоящего из 20 чисел в диапазоне от 0 до 100, все элементы, которые больше 35 и меньше 65. При этом удаляемые числа сохраним в другом списке.

В Python с помощью инструкции del можно удалить элемент списка, указав сам список и индекс удаляемого элемента.

Алгоритм решения задачи выглядит вроде бы простым: достаточно перебрать элементы списка и удалить те, которые удовлетворяют условию. Но все не так просто. При удалении элемента на его место становится следующий, но поскольку мы переходим к следующему элементу, то пропускаем проверку того, что стал на место удаленного. Цикл for использовать нельзя, т.к. меняется количество элементов списка.

Можно использовать цикл while, измеряя на каждой его итерации длину списка, индекс же увеличивать только в том случае, если удаления элемента не произошло.

import random
 
a = []
for i in range(20):
	n = round(random.random() * 100) # от 0 до 100 включительно
	a.append(n)
print("A =",a)
 
b = []
i = 0
while i < len(a):
	if 35 < a[i] < 65:
		b.append(a[i])
		del a[i]
	else:
		i += 1
print("A =",a)
print("B =",b)

Примеры выполнения программы:

A = [80, 35, 30, 98, 35, 4, 94, 51, 22, 22, 52, 97, 67, 90, 9, 1, 87, 78, 100, 29]
A = [80, 35, 30, 98, 35, 4, 94, 22, 22, 97, 67, 90, 9, 1, 87, 78, 100, 29]
B = [51, 52]
A = [68, 88, 64, 39, 13, 99, 6, 35, 50, 76, 47, 82, 76, 87, 44, 86, 75, 46, 8, 32]
A = [68, 88, 13, 99, 6, 35, 76, 82, 76, 87, 86, 75, 8, 32]
B = [64, 39, 50, 47, 44, 46]

Создано