Lewati ke konten utama

Python filter(): Simpan Hanya yang Anda Butuhkan

Pelajari cara menggunakan fungsi filter() di Python untuk mengekstrak item dari list atau iterable lainnya. Pahami perbedaan utama antara filter dan alat Python serupa.
· 7 mnt Baca

Jelajahi bersama AI

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.

Sintaks Python filter()

Formatnya seperti ini:

filter(function, iterable)
  • 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:

def is_even(num):
    return num % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]
result = filter(is_even, numbers)
print(list(result))

Ini akan mencetak:

[2, 4, 6]

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))

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))

Ini akan mencetak:

[1, 'hello', [2, 3], True]

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.

words = ['apple', 'banana', 'apricot', 'cherry', 'avocado'] 
result = filter(lambda word: word.startswith('a'), words) 
print(list(result))

Anda akan mendapatkan:

['apple', 'apricot', 'avocado']

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.

numbers = [4, 10, 12, 15, 20, 23, 28] 
result = filter(lambda x: x % 2 == 0 and x > 10, numbers) 
print(list(result))

Ini mencetak:

[12, 20, 28]

(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:

numbers = [1, 2, 3, 4, 5, 6] 
result = [x for x in numbers if x % 2 == 0] 
print(result)
[2, 4, 6]

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))

Ini akan mencetak:

(25, 30)

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 in range(10))
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))

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))

Ini mencetak:

[4, 16, 36]

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 merekomendasikan Python Programming Fundamentals skill track kami. 

Josef Waples

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.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai