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.

È stato utile?

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))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top