Python (или NUMPY) эквивалент совпадения в R - PullRequest
12 голосов
/ 06 ноября 2010

Есть ли в 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 Ответ

22 голосов
/ 06 ноября 2010
>>> 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...