将功能列表应用于可迭代对象列表

时间:2019-07-28 08:18:36

标签: python

我有以下任务:

编写一个名为“ apply_functions”的函数

接受两个列表作为输入: 第一个列表将是可迭代的列表 第二个列表将是,和

函数的一部分

返回一个长度与第一个列表相同的列表,其中该列表中的每个元素 是一个 tuple ,其中已应用了第二个列表中的功能。

例如如果列表是[[1,2 ,, [3,4]]和[len,sum,type],则返回应为: [(2,3,tuple),(2,7,list)]。 注意,元组的顺序为(长度,总和,类型);与传递的函数顺序相同


以下是输出的示例:

objs = [(1,2),[1,3,4,5,6,7],[0]]
funcs = [len,sum]
print(apply_functions(objs, funcs))
Output -->  [(2, 3), (6, 26), (1, 0)]

这是我当前的代码,但是它只返回对obj和funcs的第一项的正确答案:

def apply_functions(list_of_objs, list_of_funcs):
    list1 = ()
    for n in list_of_objs:
        tup = ()
        for f in list_of_funcs:
            tup += (f(n),)
        return tup
        list1 += tup

    return list1

3 个答案:

答案 0 :(得分:0)

您可以简单地遍历每个项目并将功能应用于该项目

def apply(items, funcs):

    output = []
    #Loop over the items
    for item in items:
        #Apply function over each item and add it to result
        output.append(tuple(func(item) for func in funcs))

    return output

print(apply([(1,2),[3,4]], [len, sum, type]))
print(apply([(1,2),[1,3,4,5,6,7],[0]], [len,sum]))

输出将为

[(2, 3, <class 'tuple'>), (2, 7, <class 'list'>)]
[(2, 3), (6, 26), (1, 0)]

或者说单线理解

def apply(items, funcs):

    # Loop over the items, apply function over each item and add it to result
    output = [ tuple(func(item) for func in funcs) for item in items ]

    return output

答案 1 :(得分:0)

objs = [(1,2),[1,3,4,5,6,7],[0]]
funcs = [len,sum]
m = [list(map(fun, objs)) for fun in funcs]
list(zip(m[0],m[1])) 

输出:

[(2, 3), (6, 26), (1, 0)]

答案 2 :(得分:0)

请尝试以下代码:

x=[(1,2),[3,4]]
f=[len,sum,type]
z=[map(y,x) for y in f]
result=[tuple(z[j][i] for j in range(len(z))) for i in range(len(z[0]))]