Необходимо удалить парные элементы в списке
Знаю про функцию set(), но она оставляет число. То есть мне нужно удалить оба элемента. Например, [1, 2, 3, 3, 2] необходимо преобразовать в [1].
Ответы (3 шт):
Для каждого элемента проверяем сколько раз он повторяется в списке. Если 1, то оставляем его.
[x for x in a if a.count(x) == 1] # [1]
Можно посчитать сколько раз встречается каждое число с помощью Counter
from collections import Counter
data = [1, 2, 3, 3, 2]
counter = Counter(data)
uniqs = []
for x, num in counter.items():
if num == 1:
uniqs.append(x)
print(uniqs)
Это самое эффективное по скорости работы решение для общего случая. Впрочем, если нам известно про входные данные что-то особенное, то можно найти ещё более эффективные решения.
Например, если как в вашем случае, повторяющиеся элементы всегда парные, а уникальный элемент только один, то можно использовать хак с "исключающим или" и найти уникальный элемент за линейное время:
from itertools import accumulate
from operator import xor
data = [1, 2, 3, 3, 2]
uniq = accumulate(data, xor)
print(list(uniq)[-1])
Если нужно удалить элементы, встречающиеся чётное количество раз, и оставить по одному элементу для тех, которые имеют нечётное число вхождений, то можно так:
from functools import reduce
l = [1, 2, 3, 3, 2, 4, 5, 5, 5, 5, 5, 2, 2]
res = reduce(lambda s, x: s ^ {x}, l, set())
Результат:
{1, 4, 5}