Bagaimana untuk Menguji Keahlian Berbilang Nilai dengan Cekap dalam Senarai Python: Iterating, Sets, or all()?

Linda Hamilton
Lepaskan: 2024-10-30 11:45:05
asal
294 orang telah melayarinya

How to Efficiently Test Membership of Multiple Values in a Python List: Iterating, Sets, or all()?

Menguji Keahlian Pelbagai Nilai dalam Senarai Melalui Lelaran

Kelakuan Python semasa menguji berbilang nilai untuk keahlian dalam senarai boleh mengelirukan. Menggunakan 'a','b' dalam ['b', 'a', 'foo', 'bar'] mengembalikan ('a', True), menunjukkan bahawa hasilnya ialah tuple di mana elemen pertama ialah nilai pertama diperiksa dan elemen kedua ialah keahlian nilai tersebut. Untuk menguji keahlian berbilang nilai dalam senarai, pendekatan berikut disyorkan:

all(x in ['b', 'a', 'foo', 'bar'] for x in ['a', 'b'])
Salin selepas log masuk

Pernyataan ini menggunakan ungkapan penjana dalam fungsi all() untuk menguji setiap nilai dalam senarai kedua untuk keahlian dalam yang pertama.

Pendekatan Alternatif

Walaupun kaedah berasaskan lelaran umumnya boleh dipercayai, pendekatan alternatif wujud. Menggunakan set menyediakan pilihan ujian subset:

set(['a', 'b']).issubset(set(['a', 'b', 'foo', 'bar']))
Salin selepas log masuk

Walau bagaimanapun, set hanya boleh mengandungi elemen boleh cincang, mengehadkan aplikasinya.

Pertimbangan Kelajuan

Ujian subset biasanya lebih pantas, tetapi perbezaannya hanya ketara apabila kedua-dua bekas dan item adalah kecil. Dalam kebanyakan kes, menggunakan fungsi all() masih cekap.

Jika item sudah ada dalam senarai, menukarkannya kepada set sebelum menggunakan ujian subset boleh memberikan sedikit kelajuan. Menukar bekas yang bukan set kepada set adalah tidak disyorkan, kerana kelajuan adalah minimum dan overhed storan tambahan boleh menjadi masalah.

Kes Luar Biasa

Apabila ujian untuk keahlian sebilangan besar nilai, terutamanya jika ada yang tidak berada dalam bekas, all() boleh memberikan kelebihan kelajuan yang ketara berbanding ujian subset. Ini disebabkan oleh tingkah laku litar pintasnya, yang membolehkannya memintas elemen ujian yang tidak terdapat dalam bekas.

Ringkasan

Untuk kegunaan umum, menukar bekas ke set disyorkan jika elemennya boleh dicincang. Ujian subset adalah berfaedah hanya jika item ujian telah disimpan dalam satu set. Dalam situasi tertentu, seperti menguji keahlian sebilangan besar nilai, all() memberikan prestasi unggul.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Keahlian Berbilang Nilai dengan Cekap dalam Senarai Python: Iterating, Sets, or all()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!