Je veux appliquer une fonction (len
) sur chaque élément d'un vecteur. Dans R, je peux facilement le faire avec sapply(cities,char)
. Existe-t-il une alternative comme celle-ci dans Python SANS écrire de boucle?
La syntaxe est map(function, list)
.
Exemple:
map(len, [ [ 1,2,3], [4,5,6] ])
Production:
[ 3, 3 ]
La R sapply()
pourrait être remplacée par une compréhension de liste, mais assez juste une compréhension de liste n'évite pas strictement l'écriture d'un loop.
En plus de map()
, vous devriez jeter un œil à Pandas , qui fournit Python alternatives à plusieurs des fonctionnalités que les gens utilisent dans R.
import pandas as pd
vector = [1,2,3,4,5]
square_vector = pd.Series(vector).apply(lambda x: x**2)
print square_vector.tolist()
Le code ci-dessus donne une nouvelle liste avec les valeurs carrées de l'imput:
[1, 4, 9, 16, 25]
Ici, j'ai passé le vecteur à un constructeur de série pd.Series(vector)
et appliqué une fonction anonyme apply(lambda x: x**2)
. La sortie est une série pandas qui peut être reconvertie en liste si vous le souhaitez tolist()
. Pandas possède de nombreuses fonctionnalités et sont idéales pour de nombreuses tâches de manipulation et d'analyse de données.
Vous pouvez utiliser une carte de fonctions qui reçoit une fonction à appliquer à un itérable. Documentation pour cartographier la carte: ici
Par exemple, vous pouvez passer une fonction anonyme (en utilisant lambda) pour appliquer à chaque élément de la liste de cette façon:
>>> map(lambda x: x[1]*2 + 3, [[1,2,3], [1,4]])
[7, 11]