web-dev-qa-db-ja.com

Python vs. R:ベクトルの各要素に関数を適用する

ベクトルの各要素に関数(len)を適用します。 Rでは、sapply(cities,char)で簡単にこれを行うことができます。 Pythonループを作成せずにこのような代替手段はありますか?

16
Sylvi0202

構文はmap(function, list)です。

例:

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

出力:

[ 3, 3 ]
12

R sapply()はリストの内包表記に置き換えることができますが、リストの内包表記はwritingを厳密に回避しません loop

map()に加えて、 Pandas を参照する必要があります。これは、Rで使用されるいくつかの機能に代わるPython代替手段を提供します。

_import pandas as pd

vector = [1,2,3,4,5]
square_vector = pd.Series(vector).apply(lambda x: x**2)  
print square_vector.tolist()
_

上記のコードは、入力の二乗値を含む新しいリストになります。

_[1, 4, 9, 16, 25]
_

ここでは、ベクトルをシリーズコンストラクターpd.Series(vector)に渡し、匿名関数apply(lambda x: x**2)を適用します。出力はpandasシリーズであり、必要に応じてリストに戻すことができますtolist()。Pandasシリーズには多くの機能があり、多くのデータ操作および分析タスクに最適です。

関数を受け取って反復可能オブジェクトに適用する関数マップを使用できます。マップをマップするためのドキュメント: here

たとえば、匿名関数(ラムダを使用)を渡して、この方法でリストの各要素に適用できます。

>>> map(lambda x: x[1]*2 + 3, [[1,2,3], [1,4]])
[7, 11]
2
Angel F