Есть ли более краткий способ определить этот массив значений функций в Python? - PullRequest
0 голосов
/ 20 октября 2019

Я новичок в Python. Я хочу применить различные перестановки трех функций f, g и h, где сопоставление означает композицию функций (например, fg (x) = f (g (x))), чтобы сказать, список x логических целых чисел, и поместить результатыв массиве. Чтобы было легко проверить, что каждому элементу массива присвоено правильное значение, я хочу, чтобы его индекс отражал перестановку, которая его сгенерировала.

То, что я придумал ниже, работает нормально, но есть ли лучший способ? В частности, я бы предпочел, чтобы между текущей функцией и ранее примененными появлялось что-то более короткое, чем "(list (c [p.index ("), если это возможно.

def f(x):
#   manipulate x
    return x
def g(x):
#   manipulate x
    return x
def h(x):
#   manipulate x
    return x

def apply_perms(x):
    assert (len(x) == 10)

    p = (
    'f','g','h',
    'fg','gh','hf',
    'ffg','fgh','fhf'
    )

    c = [[0] * 10 for _ in range(9)]

    c[p.index('f')] = f(list(x))
    c[p.index('g')] = g(list(x))
    c[p.index('h')] = h(list(x))
    c[p.index('fg')] = f(list(c[p.index('g')]))
    c[p.index('gh')] = g(list(c[p.index('h')]))
    c[p.index('hf')] = h(list(c[p.index('f')]))
    c[p.index('ffg')] = f(list(c[p.index('fg')]))
    c[p.index('fgh')] = f(list(c[p.index('gh')]))
    c[p.index('fhf')] = f(list(c[p.index('hf')]))

    return c

x = [1,0,1,0,0,0,1,0,0,1]
apply_perms(x)
...