Periksa apakah item ada dalam array / daftar

203

Jika saya punya array string, dapatkah saya memeriksa apakah string ada di array tanpa melakukan forloop? Secara khusus, saya mencari cara untuk melakukannya dalam sebuah ifpernyataan, jadi kira-kira seperti ini:

if [check that item is in array]:
Anak kucing
sumber
3
Saya pikir pertanyaannya sudah dijawab di sini
Tarun Ande
1
Atau lebih baik di sini: stackoverflow.com/questions/12934190/…
torina
Kemungkinan duplikat dari cara tercepat untuk memeriksa apakah ada nilai dalam daftar
Chris_Rands

Jawaban:

396

Dengan asumsi Anda maksud "daftar" di mana Anda mengatakan "array", Anda dapat melakukannya

if item in my_list:
    # whatever

Ini berfungsi untuk koleksi apa pun, tidak hanya untuk daftar. Untuk kamus, memeriksa apakah kunci yang diberikan ada dalam kamus.

Sven Marnach
sumber
1
@ Jdi, dan loop itu akan berjalan lebih cepat daripada yang dikodekan secara eksplisit dalam Python, belum lagi menjadi lebih mudah dibaca.
Mark Ransom
17

Saya juga akan menganggap bahwa maksud Anda "daftar" ketika Anda mengatakan "array." Solusi Sven Marnach baik. Jika Anda akan melakukan pemeriksaan berulang pada daftar, maka mungkin layak untuk mengubahnya menjadi satu set atau frozenset, yang bisa lebih cepat untuk setiap pemeriksaan. Dengan asumsi daftar str Anda disebut subjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever
Michael Hoffman
sumber
3

Gunakan fungsi lambda.

Katakanlah Anda memiliki array:

nums = [0,1,5]

Periksa apakah 5 ada di nums:

(len(filter (lambda x : x == 5, nums)) > 0)

Solusi ini lebih kuat. Anda sekarang dapat memeriksa apakah nomor yang memenuhi kondisi tertentu ada di array Anda nums.

Misalnya, periksa apakah nomor yang lebih besar atau sama dengan 5 ada di nums:

(len(filter (lambda x : x >= 5, nums)) > 0)
Marquistador
sumber
Ini berfungsi dengan Python2. Dengan Python 3.7, Anda akan mendapatkan kesalahan ini:TypeError: object of type 'filter' has no len()
Jun711
1

Anda harus menggunakan nilai. Untuk array. misalnya katakan Anda memiliki kerangka data yang memiliki nama kolom yaitu, uji ['Nama'], Anda dapat melakukannya

if name in test['Name'].values :
   print(name)

untuk daftar normal, Anda tidak perlu menggunakan nilai

sam komo
sumber
Saya pikir Anda memerlukan objek DataFrame Pandas untuk menggunakan .values.
troymyname00
-3

Anda juga bisa menggunakan sintaks yang sama untuk array. Misalnya, mencari di dalam seri Pandas:

ser = pd.Series(['some', 'strings', 'to', 'query'])

if item in ser.values:
    # do stuff
BCR
sumber