Как вывести из списка чётное число, если все остальные значения будут нечётные, и наоборот?
Списков могут быть два вида, со всеми чётными числами и одним нечётным, и со всеми нечётными числами и одним чётным. В списке может быть минимум три значения.
Списки для примера:
[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))