Итеративное удаление значений из списка
Как удалять значения из списка [1, 2, 3], чтобы на выходе получилось [2, 3], [1, 3], [1, 2]. Если делать это в цикле вот так
my_list = [1, 2, 3]
new_list = []
for i in my_list:
new_list.append(my_list.remove(i))
то по очереди убираются все значения из списка, а это не то что нам нужно.
Ответы (2 шт):
Лучше использовать всё же позиции элементов для их исключения, а не удалять сами элементы:
new_list = [[x for j,x in enumerate(my_list) if i != j] for i in range(len(my_list))]
print(new_list)
Вам в любом случае придётся как-то копировать список, а не "резать по живому". Если добавить копирование к вашему коду, то будет выглядеть примерно так:
my_list = [1, 2, 3]
new_list = []
for i in my_list:
tmp_list = my_list.copy()
tmp_list.remove(i)
new_list.append(tmp_list)
print(new_list)
Тут ещё надо помнить, что remove удаляет элемент и ничего не возвращет.
UPD: При большой длине входного списка оптимальнее использовать второй вариант из-за его линейной сложности:

Если вы хотите получить сочетание из my_list по 2, то можно воспользоваться itertools.combinations:
from itertools import combinations
res = list(combinations(my_list, 2))
результат:
In [489]: print(res)
[(1, 2), (1, 3), (2, 3)]
если нужен строго список списков:
res = list(map(list, combinations(my_list, 2)))
результат:
In [491]: res
Out[491]: [[1, 2], [1, 3], [2, 3]]
Сочетание с повторениями:
from itertools import combinations_with_replacement
In [493]: list(combinations_with_replacement(my_list, 2))
Out[493]: [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]