web-dev-qa-db-fra.com

Python vs. R: appliquer une fonction à chaque élément d'un vecteur

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?

16
Sylvi0202

La syntaxe est map(function, list).

Exemple:

map(len, [ [ 1,2,3], [4,5,6] ])

Production:

[ 3, 3 ]
12
Warlike Chimpanzee

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.

6

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]
2
Angel F