2010-11-05 24 views
12

¿Hay alguna manera fácil en Python para lograr lo que hace la función de coincidencia en R? qué coincidencia en R hace es que devuelve un vector de las posiciones de (primeras) coincidencias de su primer argumento en su segundo.python (o numpy) equivalente de coincidencia en R

Por ejemplo, el siguiente fragmento de R.

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

traducir eso en Python, lo que estoy buscando es una función que hace lo siguiente

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

Gracias!

Respuesta

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] 

Suma 1 si realmente necesita la posición "basada en uno" en lugar de "basada en cero".

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

Usted puede hacer esta reutilizable de una sola línea si se va a repetir mucho:

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

Gran! ¡Gracias! – djiao

+0

Agradable. Esa es una excelente manera de evitar el error list.index() cuando el elemento no existe. – hatmatrix