2010-11-05 28 views
12

Có cách nào dễ dàng trong python để thực hiện chức năng khớp nào trong R? những gì phù hợp trong R hiện là nó trả về một véc tơ của các vị trí của (đầu tiên) trận đấu của đối số đầu tiên của nó trong thứ hai của nó.tương đương trăn (hoặc numpy) của trận đấu trong R

Ví dụ: đoạn mã R sau.

> a <- c(5,4,3,2,1) 
> b <- c(2,3) 
> match(a,b) 
[1] NA NA 2 1 NA 

Dịch rằng trong python, những gì tôi đang tìm kiếm là một chức năng nào sau đây

>>> a = [5,4,3,2,1] 
>>> b = [2,3] 
>>> match(a,b) 
[None, None, 2, 1, None] 

Cảm ơn bạn!

Trả lời

22
>>> a = [5,4,3,2,1] 
>>> b = [2,3] 
>>> [ b.index(x) if x in b else None for x in a ] 
[None, None, 1, 0, None] 

Tổng 1 nếu bạn thực sự cần vị trí "dựa trên" thay vì "không dựa".

>>> [ b.index(x)+1 if x in b else None for x in a ] 
[None, None, 2, 1, None] 

Bạn có thể làm một lót thể tái sử dụng này nếu bạn đang đi để lặp lại nó rất nhiều:

>>> match = lambda a, b: [ b.index(x)+1 if x in b else None for x in a ] 
>>> match 
<function <lambda> at 0x04E77B70> 
>>> match(a, b) 
[None, None, 2, 1, None] 
+0

Tuyệt vời! Cảm ơn bạn! – djiao

+0

Đẹp. Đó là một cách tuyệt vời để vượt qua lỗi list.index() khi phần tử không tồn tại. – hatmatrix

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