2010-11-05 73 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