Я новичок в 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)