Existe um nome padrão para esta função?
-
20-09-2019 - |
Pergunta
O que você nomearia uma função que pega uma lista e uma função, e retornaria true se a aplicação da função a todos os elementos fornecer o mesmo resultado?
def identical_results(l, func):
if len(l) <= 1: return True
result = func(l[0])
for el in l[1:]:
if func(el) != result:
return False
return True
Existe um bom nome geralmente aceito para essa coisa? Bônus se você pode implementar de uma maneira menos desajeitada.
Solução
Em .net, o mais próximo é Array.TrueForAll
.
Pode ser SameForAll
Seria mais apropriado para esta função?
Outras dicas
Ainda não ouvi falar de um nome especial para isso (um pouco semelhante a Forall
, mas não exatamente). IdenticalResults
parece bom então (Jon Seigel propôs SameForAll
, também muito bom)
Além disso: é assim que se poderia implementar isso em Haskell usando o all
função (TrueForall
Under .Net)
ident [] = True
ident (x:xs) = all (== x) xs
sameForAll f = ident . map f
E python:
def idents(f, list):
if len(list) <= 1:
return True
else:
let fx0 = f(list[0])
return all(( f(x) == fx0 for x in list[1:] ))
Não consigo pensar em um bom nome até agora, mas este faz o mesmo:
def identical_results(l, func):
return len(set(map(func, l))) <= 1
idêntico_results parece um nome razoável para mim.
Eu postei isso em um comentário acima, mas a formatação ficou bagunçada, então aqui está novamente para clareza:
def identical_results(l, func):
return reduce(lamdba x,y: x and y, map(func, l))