Pelajari cara menggunakan fungsi filter() di Python untuk mengekstrak item dari list atau iterable lainnya. Pahami perbedaan utama antara filter dan alat Python serupa.
Memfilter adalah salah satu tugas paling umum di Python, itulah sebabnya Python membuatnya mudah. Salah satu cara paling sederhana untuk memfilter data adalah dengan fungsi bawaan filter(). Sesuai namanya, filter() memungkinkan Anda mengambil hanya item yang memenuhi kondisi tertentu.
Panduan ini akan menunjukkan cara kerjanya, kapan menggunakannya, dan bagaimana perbandingannya dengan alat pemfilteran lainnya. Silakan dibaca!
Apa yang Dilakukan Python filter()
filter() memungkinkan Anda mengambil elemen dari list, tuple, atau iterable apa pun, tetapi hanya jika elemen tersebut lolos uji Anda. Anda menyediakan sebuah fungsi (kadang disebut predikat) yang mengambil tiap item dan mengembalikan True atau False. Jika tesnya lolos (baca: jika fungsi Anda mengembalikan True) filter() akan menyimpannya. Jika tidak, item akan dilewati. Ini cukup jelas, jadi mari lanjut.
function: Menentukan uji yang ingin Anda terapkan pada setiap item. Harus menerima satu argumen dan mengembalikan True atau False.
iterable: Menyediakan list, tuple, string, atau objek apa pun yang dapat Anda iterasi.
Saat Anda memanggil filter(), ia mengembalikan objek filter khusus, bukan langsung list atau tuple. Untuk benar-benar bekerja dengan hasil yang sudah difilter, Anda biasanya membungkus keluarannya dalam list atau tuple. Pilihan desain ini membuat filter() efisien, tetapi ini perlu diingat saat Anda menulis kode.
Contoh Python filter()
Mari berlatih sedikit.
Python filter() dengan fungsi kustom
Mari gunakan filter() dengan fungsi yang kita tulis sendiri.
Misalkan Anda ingin menyimpan hanya bilangan genap dari sebuah list:
defis_even(num):return num %2==0
numbers =[1,2,3,4,5,6]
result =filter(is_even, numbers)print(list(result))Didukung oleh
Perhatikan bagaimana is_even memeriksa apakah suatu bilangan habis dibagi 2. filter() menggunakan fungsi kustom kita untuk menguji setiap item dan menyimpan yang lolos uji.
Python filter() dengan fungsi lambda
Tentu saja, tidak setiap filter membutuhkan definisi fungsi lengkap. Terkadang, aturan pemfilteran Anda begitu sederhana atau begitu spesifik di satu tempat sehingga mendefinisikan fungsi bernama terasa berlebihan.
Berikut contoh bilangan genap yang sama, tetapi menggunakan lambda untuk tes singkat di tempat:
numbers =[1,2,3,4,5,6]
result =filter(lambda x: x %2==0, numbers)print(list(result))Didukung oleh
Anda akan mendapatkan keluaran yang sama seperti sebelumnya.
Menggunakan lambda dengan filter() sangat umum ketika Anda ingin menjaga kode tetap singkat dan fokus. Ini sangat cocok untuk tugas pemfilteran sekali pakai, memungkinkan Anda menuliskan aturannya tepat di tempat Anda membutuhkannya.
Python filter() dengan None sebagai fungsi
Terkadang, Anda ingin menggunakan filter() untuk membuang nilai kosong atau bernilai salah. Hal-hal seperti 0, string kosong, None, atau False, dan kita ingin melakukannya tanpa menulis fungsi kustom.
Python punya trik untuk ini: Jika Anda menetapkan argumen fungsi di filter() menjadi None, filter() akan secara otomatis menghapus semua item yang dianggap False oleh Python.
Contohnya seperti ini:
items =[0,1,'','hello',[],[2,3],None,False,True]
result =filter(None, items)print(list(result))Didukung oleh
Sekarang mari terapkan filter() pada masalah praktis sehari-hari. Misalkan Anda memiliki list kata dan hanya menginginkan yang diawali huruf 'a'. Pemfilteran terarah seperti ini sering muncul saat memroses teks.
words =['apple','banana','apricot','cherry','avocado']
result =filter(lambda word: word.startswith('a'), words)print(list(result))Didukung oleh
Terkadang, kriteria pemfilteran Anda menjadi lebih kompleks. Bagaimana jika Anda membutuhkan item yang memenuhi beberapa kondisi? Berikut cara melakukannya menggunakan lambda. Dalam contoh ini, kita mencari bilangan yang genap dan lebih besar dari 10.
numbers =[4,10,12,15,20,23,28]
result =filter(lambda x: x %2==0and x >10, numbers)print(list(result))Didukung oleh
Baik filter() maupun list comprehension akan menyelesaikan pekerjaan. List comprehension sering kali lebih mudah dibaca untuk filter yang lugas, terutama saat aturannya pendek dan sederhana.
Di sisi lain, filter() bekerja baik ketika Anda sudah bekerja dengan fungsi, atau saat ingin merangkai beberapa langkah pemrosesan.
Penggunaan yang Lebih Lanjut
Mari cari beberapa kasus yang lebih menarik:
filter() dengan iterable lainnya
Sama seperti pada list, filter() juga bekerja dengan iterable apa pun, seperti tuple, set — bahkan ekspresi generator. Ini penting karena data Anda tidak selalu berbentuk list.
Berikut cara memfilter sebuah tuple:
numbers =(10,15,20,25,30)
result =filter(lambda x: x >20, numbers)print(tuple(result))Didukung oleh
Ingatlah untuk mengonversi objek filter ke tipe yang Anda inginkan (list, tuple, dll.) saat Anda perlu menggunakan hasilnya secara langsung.
Saya juga menyebutkan generator, jadi agar lengkap, saya akan menunjukkan contoh pemfilteran dengan generator juga:
numbers =(x for x inrange(10))
result =filter(lambda x: x %2==0, numbers)print(list(result))Didukung oleh
Ini adalah generator karena baris ini: numbers = (x for x in range(10)) membuat objek generator. (Ia malas dan tidak menghasilkan semua nilai sekaligus.)
Baris terakhir: print(list(result)) memaksa evaluasi dengan mengonversi objek filter yang malas menjadi list.
Mengombinasikan filter() dengan map()
Bagaimana jika Anda ingin sekaligus memfilter dan mentransformasikan data, misalnya, pada contoh berikutnya, menguadratkan hanya bilangan genap dalam sebuah list?
Python memudahkan ini dengan memungkinkan Anda mengombinasikan filter() dan map(). Pertama, filter() memilih item yang Anda inginkan, lalu map() menerapkan fungsi lain pada masing-masingnya.
Berikut praktiknya:
numbers =[1,2,3,4,5,6]
evens =filter(lambda x: x %2==0, numbers)
squared =map(lambda x: x **2, evens)print(list(squared))Didukung oleh
Dengan merangkai filter() dan map(), Anda dapat membangun pipeline data yang jelas dan mudah dibaca, dengan terlebih dahulu memilih item yang penting, lalu mentransformasikannya sesuai kebutuhan. Akan ada banyak peluang menggunakan pola ini dalam pekerjaan Anda.
Hal-Hal yang Perlu Diwaspadai
Meski filter() sangat berguna, ada beberapa kesalahan yang sering terjadi:
filter() mengembalikan objek filter, bukan list. Ini bisa mengecoh jika Anda berharap melihat hasilnya langsung. Selalu bungkus dalam list (atau tuple) jika Anda perlu melihat atau menggunakan kembali hasilnya.
filter() hanya bekerja dengan satu iterable pada satu waktu. Jika Anda ingin memfilter berdasarkan beberapa list, Anda perlu menggabungkannya dengan zip atau menggunakan pendekatan lain.
filter() bersifat malas (lazy). Ia tidak benar-benar memproses data sampai Anda mengonversinya ke list, tuple, atau melakukan iterasi. Ingat perilaku ini saat melakukan debugging.
Kesimpulan
Seperti yang telah Anda lihat, fungsi filter() di Python memberi Anda cara cepat untuk membersihkan data dengan mengambil hanya yang penting. filter() membantu baik saat Anda menulis lambda sekali pakai maupun saat menyematkan fungsi bernama.
Jika Anda masih belum yakin cara menggunakan filter(), atau jika Anda merasa itu cukup sederhana dan ingin terus belajar, kami punya sumber daya hebat untuk membantu. Saya merekomendasikanPython Programming Fundamentals skill track kami.
Penulis
Josef Waples
Saya penulis dan editor data science dengan kontribusi pada artikel riset di jurnal ilmiah. Saya sangat tertarik pada aljabar linear, statistika, R, dan sejenisnya. Saya juga cukup sering bermain catur!
FAQ Python Filter
Apa yang dilakukan fungsi Python filter()?⌄
Fungsi filter() menerima sebuah fungsi dan sebuah iterable lalu mengembalikan iterable baru yang hanya berisi item-item yang lolos uji. Fungsi uji harus mengembalikan True untuk item yang ingin Anda pertahankan dan False untuk item yang ingin Anda lewati.
Mengapa saya perlu membungkus hasil filter() dalam list() atau tuple()?⌄
filter() mengembalikan objek filter, yang merupakan iterator. Untuk melihat atau menggunakan kembali hasil yang sudah difilter, Anda biasanya mengonversinya menjadi list atau tuple menggunakan list() atau tuple(). Langkah ini penting untuk mencetak, debugging, atau meneruskan hasil ke fungsi lain.
Bisakah saya menggunakan filter() tanpa menulis fungsi kustom?⌄
Ya. Anda dapat menggunakan fungsi lambda untuk tes singkat sekali pakai, atau meneruskan None sebagai argumen fungsi untuk secara otomatis menghapus semua nilai "falsy" seperti 0, '', None, dan False.
Bagaimana perbandingan filter() dengan list comprehension?⌄
Baik filter() maupun list comprehension memungkinkan Anda memfilter data, tetapi list comprehension sering kali lebih mudah dibaca untuk kondisi sederhana. filter() berguna saat menggunakan kembali logika melalui fungsi atau merangkai dengan alat seperti map().
Bisakah saya menerapkan beberapa kondisi dengan filter()?⌄
Tentu. Anda dapat menggabungkan beberapa kondisi menggunakan operator logika di dalam fungsi uji atau lambda Anda. Untuk logika yang kompleks, sering kali lebih baik menggunakan fungsi bernama agar kode tetap mudah dibaca.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Memfilter adalah salah satu tugas paling umum di Python, itulah sebabnya Python membuatnya mudah. Salah satu cara paling sederhana untuk memfilter data adalah dengan fungsi bawaan
filter(). Sesuai namanya,filter()memungkinkan Anda mengambil hanya item yang memenuhi kondisi tertentu.Panduan ini akan menunjukkan cara kerjanya, kapan menggunakannya, dan bagaimana perbandingannya dengan alat pemfilteran lainnya. Silakan dibaca!
Apa yang Dilakukan Python filter()
filter()memungkinkan Anda mengambil elemen dari list, tuple, atau iterable apa pun, tetapi hanya jika elemen tersebut lolos uji Anda. Anda menyediakan sebuah fungsi (kadang disebut predikat) yang mengambil tiap item dan mengembalikanTrueatauFalse. Jika tesnya lolos (baca: jika fungsi Anda mengembalikanTrue)filter()akan menyimpannya. Jika tidak, item akan dilewati. Ini cukup jelas, jadi mari lanjut.Sintaks Python filter()
Formatnya seperti ini:
function: Menentukan uji yang ingin Anda terapkan pada setiap item. Harus menerima satu argumen dan mengembalikanTrueatauFalse.iterable: Menyediakan list, tuple, string, atau objek apa pun yang dapat Anda iterasi.Saat Anda memanggil
filter(), ia mengembalikan objek filter khusus, bukan langsung list atau tuple. Untuk benar-benar bekerja dengan hasil yang sudah difilter, Anda biasanya membungkus keluarannya dalam list atau tuple. Pilihan desain ini membuatfilter()efisien, tetapi ini perlu diingat saat Anda menulis kode.Contoh Python filter()
Mari berlatih sedikit.
Python filter() dengan fungsi kustom
Mari gunakan
filter()dengan fungsi yang kita tulis sendiri.Misalkan Anda ingin menyimpan hanya bilangan genap dari sebuah list:
Ini akan mencetak:
Perhatikan bagaimana
is_evenmemeriksa apakah suatu bilangan habis dibagi 2.filter()menggunakan fungsi kustom kita untuk menguji setiap item dan menyimpan yang lolos uji.Python filter() dengan fungsi lambda
Tentu saja, tidak setiap filter membutuhkan definisi fungsi lengkap. Terkadang, aturan pemfilteran Anda begitu sederhana atau begitu spesifik di satu tempat sehingga mendefinisikan fungsi bernama terasa berlebihan.
Berikut contoh bilangan genap yang sama, tetapi menggunakan lambda untuk tes singkat di tempat:
Anda akan mendapatkan keluaran yang sama seperti sebelumnya.
Menggunakan lambda dengan
filter()sangat umum ketika Anda ingin menjaga kode tetap singkat dan fokus. Ini sangat cocok untuk tugas pemfilteran sekali pakai, memungkinkan Anda menuliskan aturannya tepat di tempat Anda membutuhkannya.Python filter() dengan None sebagai fungsi
Terkadang, Anda ingin menggunakan
filter()untuk membuang nilai kosong atau bernilai salah. Hal-hal seperti0, string kosong,None, atauFalse, dan kita ingin melakukannya tanpa menulis fungsi kustom.Python punya trik untuk ini: Jika Anda menetapkan argumen fungsi di
filter()menjadiNone,filter()akan secara otomatis menghapus semua item yang dianggapFalseoleh Python.Contohnya seperti ini:
Ini akan mencetak:
Memfilter data teks
Sekarang mari terapkan
filter()pada masalah praktis sehari-hari. Misalkan Anda memiliki list kata dan hanya menginginkan yang diawali huruf 'a'. Pemfilteran terarah seperti ini sering muncul saat memroses teks.Anda akan mendapatkan:
Memfilter dengan beberapa kondisi
Terkadang, kriteria pemfilteran Anda menjadi lebih kompleks. Bagaimana jika Anda membutuhkan item yang memenuhi beberapa kondisi? Berikut cara melakukannya menggunakan lambda. Dalam contoh ini, kita mencari bilangan yang genap dan lebih besar dari 10.
Ini mencetak:
(Jika saya memiliki kondisi yang lebih banyak lagi, saya akan mempertimbangkan beralih dari lambda ke fungsi bernama demi kejelasan.)
filter() vs. List Comprehension
List comprehension adalah cara populer lainnya untuk memilih item. Keduanya memungkinkan Anda memfilter data, tetapi masing-masing punya gaya sendiri.
Berikut contoh bilangan genap lagi, kali ini menggunakan list comprehension:
Baik
filter()maupun list comprehension akan menyelesaikan pekerjaan. List comprehension sering kali lebih mudah dibaca untuk filter yang lugas, terutama saat aturannya pendek dan sederhana.Di sisi lain,
filter()bekerja baik ketika Anda sudah bekerja dengan fungsi, atau saat ingin merangkai beberapa langkah pemrosesan.Penggunaan yang Lebih Lanjut
Mari cari beberapa kasus yang lebih menarik:
filter() dengan iterable lainnya
Sama seperti pada list,
filter()juga bekerja dengan iterable apa pun, seperti tuple, set — bahkan ekspresi generator. Ini penting karena data Anda tidak selalu berbentuk list.Berikut cara memfilter sebuah tuple:
Ini akan mencetak:
Ingatlah untuk mengonversi objek filter ke tipe yang Anda inginkan (list, tuple, dll.) saat Anda perlu menggunakan hasilnya secara langsung.
Saya juga menyebutkan generator, jadi agar lengkap, saya akan menunjukkan contoh pemfilteran dengan generator juga:
Ini adalah generator karena baris ini:
numbers = (x for x in range(10))membuat objek generator. (Ia malas dan tidak menghasilkan semua nilai sekaligus.)Baris terakhir:
print(list(result))memaksa evaluasi dengan mengonversi objek filter yang malas menjadi list.Mengombinasikan filter() dengan map()
Bagaimana jika Anda ingin sekaligus memfilter dan mentransformasikan data, misalnya, pada contoh berikutnya, menguadratkan hanya bilangan genap dalam sebuah list?
Python memudahkan ini dengan memungkinkan Anda mengombinasikan
filter()danmap(). Pertama,filter()memilih item yang Anda inginkan, lalumap()menerapkan fungsi lain pada masing-masingnya.Berikut praktiknya:
Ini mencetak:
Dengan merangkai
filter()danmap(), Anda dapat membangun pipeline data yang jelas dan mudah dibaca, dengan terlebih dahulu memilih item yang penting, lalu mentransformasikannya sesuai kebutuhan. Akan ada banyak peluang menggunakan pola ini dalam pekerjaan Anda.Hal-Hal yang Perlu Diwaspadai
Meski
filter()sangat berguna, ada beberapa kesalahan yang sering terjadi:filter()mengembalikan objek filter, bukan list. Ini bisa mengecoh jika Anda berharap melihat hasilnya langsung. Selalu bungkus dalam list (atau tuple) jika Anda perlu melihat atau menggunakan kembali hasilnya.filter()hanya bekerja dengan satu iterable pada satu waktu. Jika Anda ingin memfilter berdasarkan beberapa list, Anda perlu menggabungkannya dengan zip atau menggunakan pendekatan lain.filter()bersifat malas (lazy). Ia tidak benar-benar memproses data sampai Anda mengonversinya ke list, tuple, atau melakukan iterasi. Ingat perilaku ini saat melakukan debugging.Kesimpulan
Seperti yang telah Anda lihat, fungsi
filter()di Python memberi Anda cara cepat untuk membersihkan data dengan mengambil hanya yang penting.filter()membantu baik saat Anda menulis lambda sekali pakai maupun saat menyematkan fungsi bernama.Jika Anda masih belum yakin cara menggunakan
filter(), atau jika Anda merasa itu cukup sederhana dan ingin terus belajar, kami punya sumber daya hebat untuk membantu. Saya merekomendasikan Python Programming Fundamentals skill track kami.