Pregunta

¿Qué le nombrar una función que toma una lista y una función, y devuelve verdadero si la aplicación de la función de todos los elementos da el mismo 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

¿Hay un buen nombre generalmente aceptado para esta cosa? Bonificación si se puede aplicar de una manera menos torpe.

¿Fue útil?

Solución

En .NET, el más cercano es Array.TrueForAll.

Tal vez SameForAll sería más apropiado para esta función?

Otros consejos

Havn't oído acerca de un nombre especial para esto todavía (algo similar a Forall, pero no exactamente). IdenticalResults parece bien, así (Jon Siegel propuso SameForAll, también es bastante agradable)

Además: Esa es la manera que uno podría implementar esto en Haskell usando la función all (TrueForall bajo .NET)

ident [] = True
ident (x:xs) = all (== x) xs

sameForAll f = ident . map f

Y 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:] ))

No se puede pensar en un buen nombre hasta ahora, pero éste hace lo mismo:

def identical_results(l, func):
    return len(set(map(func, l))) <= 1

identical_results suena como un nombre razonable para mí.

he publicado esto en un comentario anterior, pero el formato dieron en mal estado, por lo que aquí está de nuevo para mayor claridad:

def identical_results(l, func):
    return reduce(lamdba x,y: x and y, map(func, l))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top