2016-12-15 5 views
5

Я хочу применить функцию (len) к каждому элементу в векторе. В R я могу сделать это с sapply(cities,char). Есть ли такая альтернатива в Python БЕЗ написания цикла?Python vs. R: применить функцию к каждому элементу в векторе

+0

https://docs.python.org/3/library/functions.html#map – jakevdp

+1

Как насчет понимания списка? '[len (el) для el в векторе]'. Это больше Pythonic, чем 'map'. –

+2

Но 'sapply' - это цикл! – Parfait

ответ

4

Синтаксис: map(function, list).

Пример:

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

Выход:

[ 3, 3 ] 
0

Вы можете использовать карту функции, которая принимает функцию, чтобы применить к итератору. Документация для отображения карты: here

Например, вы канистры передать функцию анонимному (с помощью лямбда), чтобы применить к каждому элементу в списке, таким образом:

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

R sapply() может быть заменен но достаточно справедливое понимание списка не позволяет строго избегать , написанного цикла .

В дополнение к map() вы должны взглянуть на Pandas, которая обеспечивает альтернативы Python для нескольких функциональных возможностей, которые используют люди в 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() 

Приведенные выше результаты кода в новый список с квадратными значениями из Imput:

[1, 4, 9, 16, 25] 

Здесь я прошел вектор для конструктора серии pd.Series(vector) и применить функцию Анонимус apply(lambda x: x**2). Выход представляет собой серию панд, которая может быть преобразована обратно в список при желании tolist(). Серия Pandas имеет множество функциональных возможностей и идеально подходит для многих задач управления данными и анализа.

Смежные вопросы