two inner index data crear columns columna agregar python python-2.7 map-function

python - inner - ¿Puedo usar información de índice dentro de la función de mapa?



pandas merge by index (4)

Para extender la excelente respuesta de Martijn Pieters, también puede usar las listas de comprensión en combinación con enumerate :

>>> a = [1, 3, 5, 6, 8] >>> [i * v for i, v in enumerate(a)] [0, 3, 10, 18, 32]

o

[mapfunction(i, v) for i, v in enumerate(a)]

Creo que las listas de comprensión son a menudo más legibles que las construcciones map / lambda . Cuando se usa una función de mapeo nombrada que acepta la tupla (i, v) directamente, el map probablemente gane.

Supongamos que hay una lista a = [1, 3, 5, 6, 8] .

Quiero aplicar alguna transformación en esa lista y quiero evitar hacerlo de forma secuencial, por lo que algo como map(someTransformationFunction, a) normalmente map(someTransformationFunction, a) el problema, pero ¿qué ocurre si la transformación necesita tener conocimiento del índice de cada objeto?

Por ejemplo, digamos que cada elemento debe multiplicarse por su posición. Entonces la lista debería transformarse en a a = [0, 3, 10, 18, 32] .

¿Hay una manera de hacer eso?


Para hacer compatible con Python3

def map_fn(data): idx, el = data return idx*el my_list = [2,3,5,7] print(list(map(map_fn, list(enumerate(my_list)))))


Puedes usar enumerate() :

a = [1, 3, 5, 6, 8] answer = map(lambda (idx, value): idx*value, enumerate(a)) print(answer)

Salida

[0, 3, 10, 18, 32]


Use la función enumerate() para agregar índices:

map(function, enumerate(a))

Su función pasará una tupla , con (index, value) . En Python 2, puede especificar que Python descomprima la tupla en la firma de la función:

map(lambda (i, el): i * el, enumerate(a))

Observe la tupla (i, el) en la especificación del argumento lambda. Puedes hacer lo mismo en una declaración de def :

def mapfunction((i, el)): return i * el map(mapfunction, enumerate(a))

Para dar paso a otras características de firma de funciones, como anotaciones, el desempaquetado de tuplas en los argumentos de función se ha eliminado de Python 3.

Manifestación:

>>> a = [1, 3, 5, 6, 8] >>> def mapfunction((i, el)): ... return i * el ... >>> map(lambda (i, el): i * el, enumerate(a)) [0, 3, 10, 18, 32] >>> map(mapfunction, enumerate(a)) [0, 3, 10, 18, 32]