代码之家  ›  专栏  ›  技术社区  ›  DenisKolodin

如何将数据元组映射到函数元组?

  •  2
  • DenisKolodin  · 技术社区  · 14 年前

    我有以下Python代码:

    data  = ['1', '4.6', 'txt']
    funcs = [int, float, str]
    

    如何使用相应索引中的数据作为函数的参数来调用每个函数?

    result = []
    for i, func in enumerate(funcs):
        result.append(func(data[i]))
    

    映射(函数、数据) 不要使用函数列表(是否有内置函数来实现这一点?

    5 回复  |  直到 5 年前
        1
  •  9
  •   kennytm    14 年前

    你可以的 use zip

    zip([a,b,c,...], [x,y,z,...]) == [(a,x), (b,y), (c,z), ...]
    

    然后可以迭代这个新序列,并使每个函数应用于相应的数据。既然你只想把它们收集到一个列表里, list comprehension 比for循环好得多:

    result = [f(x) for f, x in zip(funcs, data)]
    

    itertools.izip 如果您使用的是Python2.x,并且列表非常长。)

        2
  •  2
  •   Knio    14 年前

    [f(d) for d,f in zip(data, funcs)]

        3
  •  2
  •   pyfunc    14 年前
    >>> data  = ['1', '4.6', 'txt']
    >>> funcs = [int, float, str]
    >>> result = [funcs[pos](x) for pos, x in enumerate(data)]
    >>> result
    [1, 4.5999999999999996, 'txt']
    >>> 
    
        4
  •  2
  •   Georgy rassa45    4 年前

    map()

    data  = ['1', '4.6', 'txt']
    funcs = [int, float, str]
    
    result = list(map(lambda f,d: f(d), funcs, data))
    # or
    result = list(map(lambda d,f: f(d), data, funcs))
    
        5
  •  0
  •   Tony Veijalainen    14 年前

    如果需要一个接一个的值,还可以为值创建生成器:

    def my_funcvals(funcs,vals):
        return ("%s(%r) = %r" %(f.__name__,d, f(d)) for d,f in zip(data, funcs))
    
    data  = ['1', '4.6', 'txt']
    funcs = [int, float, str]
    
    for result in my_funcvals(funcs, data):
        print result