2010-11-05 60 views
12

Python中有什麼簡單的方法來完成匹配函數在R中的功能嗎? R中的匹配是它返回其第一個參數的第一個匹配的第一個匹配位置的向量。蟒蛇(或numpy)相當於R中的匹配

例如,下面的R代碼片段。

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

翻譯,在蟒蛇,我所尋找的是一個函數,它下面的

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

謝謝!

回答

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] 

總和1,如果你真的需要位置「一基於」而不是「基於零」。

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

你可以讓這一個班輪可重複使用的,如果你要重複很多:

>>> 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

太好了!謝謝! – djiao 2010-11-05 21:37:24

+0

不錯。當元素不存在時,這是解決list.index()錯誤的好方法。 – hatmatrix 2010-11-06 02:28:22