Gibt es einen Standardnamen für diese Funktion?
-
20-09-2019 - |
Frage
Was würden Sie den Namen einer Funktion, die eine Liste und eine Funktion übernimmt, und gibt Wahr zurück, wenn die Funktion auf alle Elemente der Anwendung das gleiche Ergebnis?
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
Sie haben ein schöne allgemeinen Namen für diese Sache akzeptiert? Bonus, wenn Sie in einer weniger klobig Art und Weise umsetzen können.
Lösung
In .NET, in der Nähe ist Array.TrueForAll
.
Vielleicht entsprechender SameForAll
wäre für diese Funktion?
Andere Tipps
gehört Vollständige Version anzeigen über einen speziellen Namen für diese noch (etwas ähnlich Forall
, aber nicht genau). IdenticalResults
scheint in Ordnung so (Jon Seigel vorgeschlagen SameForAll
, auch ganz nett)
Zusätzlich: Das ist die Art und Weise man dies in Haskell mit der all
Funktion (TrueForall
unter .NET) implementieren könnte
ident [] = True
ident (x:xs) = all (== x) xs
sameForAll f = ident . map f
Und 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:] ))
Kann denkt nicht an einen guten Namen so weit, aber diese macht das gleiche:
def identical_results(l, func):
return len(set(map(func, l))) <= 1
identical_results klingt wie ein angemessener Name für mich.
ich gepostet in einem Kommentar oben, aber die Formatierung wurde vermasselt, so ist es hier wieder für Klarheit:
def identical_results(l, func):
return reduce(lamdba x,y: x and y, map(func, l))