在Python中有没有更简洁的方法来定义这个函数值数组?

在Python中有没有更简洁的方法来定义这个函数值数组?,python,arrays,function-composition,Python,Arrays,Function Composition,我是Python新手。我想应用三个函数f,g和h的各种排列,其中并置意味着函数组合(例如,fg(x)=f(g(x)),也就是说,布尔整数的列表x,并将结果放入数组中。为了便于验证每个数组元素是否分配了正确的值,我希望其索引反映生成它的排列 我下面的想法很好,但有更好的方法吗?具体地说,如果可能的话,我更希望在当前函数和以前应用的函数之间出现比列表(c[p.index])短的内容 def f(x): # manipulate x return x def g(x): # manip

我是Python新手。我想应用三个函数f,g和h的各种排列,其中并置意味着函数组合(例如,fg(x)=f(g(x)),也就是说,布尔整数的列表x,并将结果放入数组中。为了便于验证每个数组元素是否分配了正确的值,我希望其索引反映生成它的排列

我下面的想法很好,但有更好的方法吗?具体地说,如果可能的话,我更希望在当前函数和以前应用的函数之间出现比列表(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)

您的问题不清楚。
f
g
h
是否应该将列表作为参数并返回列表,还是应该对列表的各个元素进行操作?正如现在编写的那样,您的代码将生成错误,因为函数返回
None
,而您无法应用
list(…)
TypeError:“NoneType”对象不可编辑
你不能使用一个简单的字典吗?如果你给
c
分配了一个字典,那么你可以只做
c['f']=f(列表(x))
,它的可读性会更好。@MicheleBastione是的,既然你提到了它,我想这就是我所需要的。我还不习惯字典,所以使用了已知的数组。将把c改成字典,看看它是如何运行的。谢谢。@mark我编辑了这个问题,希望能解决你的问题。@mathematru我的观点是,如果函数已经返回列表,那么对
list(…)
的所有调用都是完全冗余的。但是您的函数可能应该返回副本,而不是修改参数。