Remova um número par / ímpar de uma lista ímpar / par de Python
Estou tentando entender melhor a compreensão da lista em Python. Concluí um desafio on-line em codewars com uma solução bastante deselegante, fornecida abaixo.
O desafio foi:
Dada uma lista de números pares e um ímpar, retorne o ímparDada uma lista de números ímpares e um par, retorne o parMinha solução (deselegante) para isso foi:
def find_outlier(integers):
o = []
e = []
for i in integers:
if i % 2 == 0:
e.append(i)
else:
o.append(i)
# use sums to return int type
if len(o) == 1:
return sum(o)
else:
return sum(e)
O que funciona bem, mas parece ser uma força bruta. Estou errado ao pensar que iniciar (a maioria) funciona com listas de marcadores comoo
ee
é bonito "noob-like"?
Gostaria de entender melhor por que essa solução funciona para a lista ímpar, mas falha na lista par, em um esforço para entender melhor a compreensão da lista:
def find_outlier(integers):
if [x for x in integers if x % 2 == 0]:
return [x for x in integers if x % 2 == 0]
elif [x for x in integers if x % 2 != 0]:
return [x for x in integers if x % 2 != 0]
else:
print "wtf!"
o = [1,3,4,5]
e = [2,4,6,7]
In[1]: find_outlier(o)
Out[1]: [4]
In[2]: find_outlier(e)
Out[2]: [2, 4, 6]
OndeOut[2]
deveria estar voltando7
.
Agradecemos antecipadamente por qualquer insights.