Подтвердить что ты не робот

Python (или numpy) эквивалент соответствия в R

Есть ли какой-либо простой способ в 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]

Спасибо!

4b9b3361

Ответ 1

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