2016-12-15 31 views
5

Tôi muốn áp dụng hàm (len) trên mỗi phần tử trong một vectơ. Trong R, tôi có thể dễ dàng thực hiện việc này với sapply(cities,char). Có một sự thay thế như thế này trong Python KHÔNG CÓ viết một vòng lặp?Python so với R: áp dụng một hàm cho mỗi phần tử trong một vector

+0

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

+1

Điều gì về việc hiểu danh sách? '[len (el) cho el trong vectơ]'. Nó nhiều hơn Pythonic hơn là 'map'. –

+2

Nhưng 'sapply' là một vòng lặp! – Parfait

Trả lời

4

Cú pháp là map(function, list).

Ví dụ:

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

Output:

[ 3, 3 ] 
0

Bạn có thể sử dụng bản đồ chức năng tiếp nhận một chức năng để áp dụng cho một iterable. Tài liệu để lập bản đồ bản đồ: here

Ví dụ, bạn lon vượt qua một (lambda sử dụng) chức năng Anonymus để áp dụng cho mỗi phần tử vào danh sách bằng cách này:

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

R sapply() có thể được thay thế bằng một danh sách hiểu, nhưng công bằng, đủ hiểu danh sách không tránh được việc viết của vòng lặp .

Ngoài map() bạn nên có một cái nhìn tại Pandas, cung cấp giải pháp thay thế Python cho một số các chức năng mà người sử dụng trong 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() 

Kết quả mã trên trong một danh sách mới với các giá trị vuông của imput:

[1, 4, 9, 16, 25] 

Ở đây, tôi đã thông qua vector để một loạt nhà xây dựng pd.Series(vector) và áp dụng một chức năng Anonymus apply(lambda x: x**2). Đầu ra là một chuỗi gấu trúc có thể được chuyển đổi trở lại danh sách nếu muốn tolist(). Loạt Pandas có rất nhiều chức năng và lý tưởng cho nhiều thao tác xử lý dữ liệu và phân tích.

Các vấn đề liên quan