Как вывести из списка чётное число, если все остальные значения будут нечётные, и наоборот?

Списков могут быть два вида, со всеми чётными числами и одним нечётным, и со всеми нечётными числами и одним чётным. В списке может быть минимум три значения.

Списки для примера:

[2, 4, 0, 100, 4, 11, 2602, 36] # должно вывести 11 (как одно нечетное)
[160, 3, 1719, 19, 11, 13, -21] # должно вывести 160 (как одно четное)

Как написать код, чтобы выводилось именно одно отличающееся число?


Ответы (3 шт):

Автор решения: Кирилл Малышев

Например так (при условии, что есть 3 элемента, иначе нельзя определить, чего больше):

res = [max, min][sum(x % 2 for x in l[:3]) > 1](l, key=lambda x: x % 2)
→ Ссылка
Автор решения: Jack_oS

Если отличный (по четности) элемент всегда один, можно так:

odd = [x for x in my_list if x%2]
even = [x for x in my_list if not x%2]

if len(odd) == 1:
    print(*odd)
else:
    print(*even)

при

my_list = [2, 4, 0, 100, 4, 11, 2602, 36]

выведет 11, а для

my_list = [160, 3, 1719, 19, 11, 13, -21] 

выведет, соответственно, 160

→ Ссылка
Автор решения: TigerTV.ru

Еще вариант, не проходит по всему списку. Как только встречен нужный элемент, обход прекращается:

def one_parity_element(x):
    parity = sum(i & 1 for i in x[:3]) < 2
    return next(filter(lambda i: i & 1 == parity, x))
→ Ссылка