R中匹配的python(或numpy)等价物

时间:2010-11-05 21:02:36

标签: python r numpy

有没有简单的方法在python中完成匹配函数在R中的作用? R中的匹配是它返回第二个参数中第一个参数(第一个)匹配位置的向量。

例如,以下R片段。

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

翻译在python中,我正在寻找的是一个执行以下操作的函数

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

谢谢!

1 个答案:

答案 0 :(得分: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]