Saya memiliki daftar nilai yang perlu saya filter mengingat nilai dalam daftar boolean:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Saya membuat daftar yang difilter baru dengan baris berikut:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
yang mengakibatkan:
print filtered_list
[1,4]
Garis bekerja tetapi terlihat (bagi saya) sedikit berlebihan dan saya bertanya-tanya apakah ada cara yang lebih sederhana untuk mencapai hal yang sama.
Saran
Ringkasan dua nasihat baik yang diberikan dalam jawaban di bawah ini:
1- Jangan beri nama daftar filter
seperti yang saya lakukan karena ini adalah fungsi bawaan.
2- Jangan membandingkan hal-hal True
seperti yang saya lakukan dengan if filter[idx]==True..
karena itu tidak perlu. Cukup menggunakan if filter[idx]
sudah cukup.
if filter[indx] == True
Do tidak menggunakan==
jika Anda ingin memeriksa identitas dengan True
, penggunaan is
. Pokoknya dalam hal ini seluruh perbandingan tidak berguna, Anda bisa menggunakannya if filter[indx]
. Terakhir: jangan pernah menggunakan nama built-in sebagai nama variabel / modul (saya mengacu pada nama filter
). Menggunakan sesuatu seperti included
, sehingga if
terbaca dengan baik ( if included[indx]
).