Chcę zastosować funkcję (len
) nad każdym elementem w wektorze. W R mogę to łatwo zrobić z sapply(cities,char)
. Czy istnieje taka alternatywa w Pythonie BEZ pisania pętli?Python vs. R: zastosowanie funkcji do każdego elementu w wektorze
Odpowiedz
Składnia to map(function, list)
.
Przykład:
map(len, [ [ 1,2,3], [4,5,6] ])
wyjściowa:
[ 3, 3 ]
można użyć funkcji mapę, która odbiera funkcję do zastosowania do iterable. Dokumentacja Mapa: here
Na przykład puszki zdać funkcja Anonymus (przy użyciu lambda) stosuje się do każdego elementu do listy w ten sposób:
>>> map(lambda x: x[1]*2 + 3, [[1,2,3], [1,4]])
[7, 11]
R sapply()
może być zastąpiony ze zrozumieniem list, ale dostatecznie zrozumiałe, że zrozumienie listy nie zapobiega jednoznacznemu zapisywaniu wartości .
Oprócz map()
należy przyjrzeć Pandas, który stanowi alternatywę Pythona do kilku funkcji, które ludzie używają w 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()
Powyższe wyniki kodu w nowej listy z wartościami kwadratowych z wpisałeś:
[1, 4, 9, 16, 25]
Tutaj zdałem wektorowi konstruktor serii pd.Series(vector)
i zastosować funkcję Anonymus apply(lambda x: x**2)
. Dane wyjściowe to seria pand, które w razie potrzeby można zamienić na listę tolist()
. Pandy serii mają wiele funkcji i są idealne do wielu zadań związanych z manipulowaniem i analizą danych.
https://docs.python.org/3/library/functions.html#map – jakevdp
Co ze zrozumieniem listy? '[len (el) dla el w wektorze]'. To bardziej Python niż "map". –
Ale 'sapply' to pętla! – Parfait