2010-11-05 3 views
12

Gibt es einen einfachen Weg in Python zu erreichen, was die Match-Funktion in R tut? Was Übereinstimmung in R tut, ist, dass es einen Vektor der Positionen der ersten Übereinstimmungen des ersten Arguments in seiner zweiten zurückgibt.python (oder numpy) entspricht der Übereinstimmung in R

Zum Beispiel das folgende R-Snippet.

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

in Python Übersetzen dass, für das, was ich bin auf der Suche ist eine Funktion, die folgenden

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

Danke tut!

Antwort

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] 

Summe 1, wenn Sie wirklich die Position "Eins basiert" anstelle von "Null basiert" benötigen.

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

Sie diesen Einzeiler wiederverwendbar machen kann, wenn man es viel wiederholen gehen:

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

Great! Vielen Dank! – djiao

+0

Schön. Das ist eine gute Möglichkeit, den Fehler list.index() zu umgehen, wenn das Element nicht existiert. – hatmatrix

Verwandte Themen