Есть ли стандартное имя для этой функции? - PullRequest
2 голосов
/ 08 октября 2009

Как бы вы назвали функцию, которая принимает список и функцию и возвращает 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

Есть ли хорошее общепринятое название для этой вещи? Бонус, если вы можете реализовать не так громко.

Ответы [ 5 ]

5 голосов
/ 08 октября 2009

В .NET самый близкий Array.TrueForAll.

Может быть, SameForAll подойдет для этой функции?

4 голосов
/ 08 октября 2009

Еще не слышал о специальном названии для этого (что-то похожее на 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:] ))
1 голос
/ 08 октября 2009

Пока не могу придумать хорошее имя, но оно делает то же самое:

def identical_results(l, func):
    return len(set(map(func, l))) <= 1
0 голосов
/ 08 октября 2009

Я разместил это в комментарии выше, но форматирование испортилось, так что здесь для ясности:

def identical_results(l, func):
    return reduce(lamdba x,y: x and y, map(func, l))
0 голосов
/ 08 октября 2009

идентичные_результаты звучат для меня как разумное имя.

...