Y at-il un nom standard pour cette fonction?
-
20-09-2019 - |
Question
Que voulez-vous nommer une fonction qui prend une liste et une fonction, et retourne Vrai si l'application de la fonction à tous les éléments donne le même résultat?
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
Y at-il un beau nom généralement accepté pour cette chose? Bonus si vous pouvez mettre en œuvre de façon moins maladroits.
La solution
Dans .NET, le plus proche est Array.TrueForAll
.
SameForAll
serait peut-être plus approprié pour cette fonction?
Autres conseils
havn't entendu parler d'un nom spécial pour ce encore (un peu similaire à Forall
, mais pas exactement). IdenticalResults
semble correct si (Jon Seigel proposé SameForAll
, également très agréable)
De plus: C'est la façon dont on pourrait mettre en œuvre cette Haskell en utilisant la fonction all
(de TrueForall
sous .NET)
ident [] = True
ident (x:xs) = all (== x) xs
sameForAll f = ident . map f
Et 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:] ))
ne peut pas penser à un bon nom à ce jour, mais celui-ci fait la même chose:
def identical_results(l, func):
return len(set(map(func, l))) <= 1
identical_results sonne comme un nom raisonnable pour moi.
Je posté dans un commentaire ci-dessus, mais le formatage ai foiré, si elle est ici à nouveau pour plus de clarté:
def identical_results(l, func):
return reduce(lamdba x,y: x and y, map(func, l))