Python Language Mapeo de valores de diferentes iterables.


Ejemplo

Por ejemplo, calculando el promedio de cada elemento i -ésimo de múltiples iterables:

def average(*args):
    return float(sum(args)) / len(args)  # cast to float - only mandatory for python 2.x

measurement1 = [100, 111, 99, 97]
measurement2 = [102, 117, 91, 102]
measurement3 = [104, 102, 95, 101]

list(map(average, measurement1, measurement2, measurement3))
# Out: [102.0, 110.0, 95.0, 100.0]

Hay diferentes requisitos si se pasa más de un iterable al map dependiendo de la versión de python:

  • La función debe tener tantos parámetros como sean iterables:

    def median_of_three(a, b, c):
        return sorted((a, b, c))[1]
    
    list(map(median_of_three, measurement1, measurement2))
    

    TypeError: median_of_three () falta 1 argumento posicional requerido: 'c'

    list(map(median_of_three, measurement1, measurement2, measurement3, measurement3))
    

    TypeError: median_of_three () toma 3 argumentos posicionales pero se dieron 4

Python 2.x 2.0.1
  • map : el mapeo se repite siempre y cuando un iterable aún no esté completamente consumido, pero no asuma None de los iterables totalmente consumidos:

    import operator
    
    measurement1 = [100, 111, 99, 97]
    measurement2 = [102, 117]
    
    # Calculate difference between elements
    list(map(operator.sub, measurement1, measurement2))
    

    TypeError: tipo (s) de operando no compatibles para -: 'int' y 'NoneType'

  • itertools.imap y future_builtins.map : la asignación se detiene tan pronto como se detiene una iterable:

    import operator
    from itertools import imap
    
    measurement1 = [100, 111, 99, 97]
    measurement2 = [102, 117]
    
    # Calculate difference between elements
    list(imap(operator.sub, measurement1, measurement2))
    # Out: [-2, -6]
    list(imap(operator.sub, measurement2, measurement1))
    # Out: [2, 6]
    
Python 3.x 3.0.0
  • La asignación se detiene tan pronto como se detiene una iterable:

    import operator
    
    measurement1 = [100, 111, 99, 97]
    measurement2 = [102, 117]
    
    # Calculate difference between elements
    list(map(operator.sub, measurement1, measurement2))
    # Out: [-2, -6]
    list(map(operator.sub, measurement2, measurement1))
    # Out: [2, 6]