Существует ли стандартное название для этой функции?
-
20-09-2019 - |
Вопрос
Как бы вы назвали функцию, которая принимает список и функцию и возвращает True, если применение функции ко всем элементам дает одинаковый результат?
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
Есть ли хорошее общепринятое название для этой штуки?Бонус, если вы сможете реализовать его менее неуклюжим способом.
Решение
В .NET наиболее близким является Array.TrueForAll
.
Может быть SameForAll
было бы более подходящим для этой функции?
Другие советы
Еще не слышал о специальном названии для этого (чем-то похожем на Forall
, но не совсем). IdenticalResults
кажется, все в порядке, так что (Джон Сейгел предложил SameForAll
, тоже довольно приятный)
Дополнительно:Вот каким образом можно было бы реализовать это в Haskell, используя all
функция (TrueForall
под .NET)
ident [] = True
ident (x:xs) = all (== x) xs
sameForAll f = ident . map f
И 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:] ))
Пока не могу придумать подходящего названия, но это делает то же самое:
def identical_results(l, func):
return len(set(map(func, l))) <= 1
identitical_results звучит для меня как разумное название.
Я опубликовал это в комментарии выше, но форматирование было перепутано, так что вот оно еще раз для наглядности:
def identical_results(l, func):
return reduce(lamdba x,y: x and y, map(func, l))