Esiste un nome standard per questa funzione?
-
20-09-2019 - |
Domanda
Che cosa è il nome di una funzione che prende una lista e una funzione, e restituisce True se applicare la funzione a tutti gli elementi dà lo stesso risultato?
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
C'è un bel nome generalmente accettato per questa cosa? Bonus se è possibile implementare in modo meno goffo.
Soluzione
In .NET, la più vicina è Array.TrueForAll
.
Forse SameForAll
sarebbe più appropriato per questa funzione?
Altri suggerimenti
Havn't sentito parlare di un nome speciale per questo ancora (in qualche modo simile a Forall
, ma non esattamente). IdenticalResults
sembra a posto così (Jon Seigel proposto SameForAll
, anche piuttosto bella)
Inoltre: Questo è il modo in cui si potrebbe implementare questa in Haskell utilizzando la funzione all
(TrueForall
sotto 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:] ))
Non riesco a pensare a un buon nome fino ad ora, ma questo fa lo stesso:
def identical_results(l, func):
return len(set(map(func, l))) <= 1
identical_results suona come un nome ragionevole per me.
Ho postato questo in un commento di cui sopra, ma la formattazione ottenuto incasinato, ecco che è nuovo per chiarezza:
def identical_results(l, func):
return reduce(lamdba x,y: x and y, map(func, l))