Pertanyaan python (atau numpy) setara dengan pertandingan di R


Apakah ada cara mudah dalam python untuk menyelesaikan fungsi pertandingan di R? apa yang cocok dalam R adalah bahwa ia mengembalikan vektor posisi (pertama) pertandingan dari argumen pertamanya dalam yang kedua.

Misalnya, potongan R berikut.

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

Terjemahkan bahwa dalam python, yang saya cari adalah fungsi yang melakukan hal berikut

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

Terima kasih!


12
2017-11-05 21:02


asal


Jawaban:


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

Jumlahkan 1 jika Anda benar-benar membutuhkan posisi "satu berbasis" daripada "berbasis nol".

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

Anda dapat membuat liner satu ini dapat digunakan kembali jika Anda akan mengulanginya banyak:

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

22
2017-11-05 21:07