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'])
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']))
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!