เมธอด filter() ใน Python ใช้กรองรายการ (lists), เซต (sets) และทูเพิล (tuples) filter() ปฏิบัติตามเกณฑ์ที่กำหนดเพื่อกรองออบเจ็กต์ที่วนซ้ำได้ (iterable) และคืนค่าผลลัพธ์ที่กรองแล้ว
เมื่อคุณเขียนโปรแกรม คุณอาจมีรายการค่าที่ต้องการกรองในบางรูปแบบ ตัวอย่างเช่น คุณอาจมีรายการคำสั่งซื้อคุกกี้และต้องการคืนค่าเฉพาะที่เกี่ยวข้องกับช็อกโกแลต ซึ่งถูกจัดการโดยเชฟเฉพาะคนที่ร้านคุกกี้ของคุณ
นี่คือที่ที่เมธอด filter() ของ Python เข้ามามีบทบาท เมธอด filter() สามารถใช้กรองรายการเฉพาะตามชุดเกณฑ์ที่กำหนดไว้ล่วงหน้าและคืนค่า iterable พร้อมข้อมูลที่กรองแล้ว
ในบทช่วยสอนนี้ เราจะพูดถึงเมธอด filter() และวิธีการใช้งานในโค้ดของคุณ เราจะเดินทางผ่านตัวอย่างการทำงานของฟังก์ชันในโค้ด Python หลายตัวอย่าง
Python Filter
รายการ (Lists) เป็นชนิดข้อมูลใน Python ที่ใช้จัดเก็บหลายค่าที่มีธีมร่วมกัน ตัวอย่างเช่น คุณอาจใช้รายการเพื่อจัดเก็บเสื้อผ้าทั้งหมดที่ร้านแฟชั่นท้องถิ่นขาย หรือจัดเก็บรายชื่อภาษาโปรแกรมมิ่ง
บ่อยครั้งที่เมื่อทำงานกับรายการ คุณจะต้องการกรองรายการตามชุดเกณฑ์ ตัวอย่างเช่น คุณอาจดำเนินการโรงหนังและต้องการทราบว่ามีคนอายุต่ำกว่า 18 ปีเข้าดูหนังที่โรงหนังของคุณกี่คน
filter() เป็นฟังก์ชันในตัว (built-in function) ที่สามารถใช้กรองรายการและคืนค่า iterator นี่คือไวยากรณ์ (syntax) สำหรับเมธอด filter():
filter(function, iterable_object)
เมธอด filter() รับสองพารามิเตอร์:
- function คือโค้ดที่จะรันบนแต่ละรายการใน iterable ที่คุณระบุ (จำเป็น) ฟังก์ชันจะตรวจสอบว่า iterable คืนค่า True หรือ False
- iterable_object คือออบเจ็กต์ที่คุณต้องการกรอง (จำเป็น)
ออบเจ็กต์ iterable ที่คุณระบุสามารถเป็น iterable ใดๆ เช่น lists, sets, และ tuples ของ Python
ตัวอย่าง Python Filter
มาเรียกตัวอย่างเพื่อสาธิตวิธีการใช้เมธอดนี้
สมมติคุณดำเนินการขายหนังสือพิมพ์และต้องการตรวจสอบว่าต้องสั่งสินค้าใหม่หรือไม่ หากคุณมีฉบับน้อยกว่า 20 ฉบับของหนังสือพิมพ์ใดๆ คุณต้องสั่งใหม่ หากมีมากกว่า 20 ฉบับ คุณไม่ต้องสั่งใหม่ คุณมีรายการตัวเลขที่จัดเก็บจำนวนหนังสือพิมพ์ที่คุณมี
เพื่อตรวจสอบว่าต้องสั่งหนังสือพิมพ์ใดๆ หรือไม่ คุณสามารถใช้โค้ดต่อไปนี้:
quantities = [25, 49, 21, 17, 14, 28] def checkQuantities(mags): if mags < 20: return True else: return False filtered_mags = filter(checkQuantities, quantities) print(list(filtered_mags))
โค้ดของเราคืนค่า: [17, 14]
มาแยกวิเคราะห์โค้ดของเรา บรรทัดแรก เรากำหนดตัวแปรชื่อ quantities ซึ่งจัดเก็บจำนวนฉบับของหนังสือพิมพ์แต่ละฉบับในสต็อกของเรา
จากนั้น เรากำหนดฟังก์ชันชื่อ checkQuantities ซึ่งจะตรวจสอบว่าเรามีฉบับน้อยกว่า 20 ฉบับของหนังสือพิมพ์เฉพาะในสต็อกหรือไม่ หากเรามีน้อยกว่า 20 ฉบับ ฟังก์ชัน checkQuantities ของเราจะคืนค่า True มิฉะนั้น จะคืนค่า False
ต่อมา เราใช้เมธอด filter() และระบุ checkQuantities เป็นฟังก์ชันของเราและ quantities เป็นออบเจ็กต์ iterable ของเรา นี่บอกเมธอด filter() ให้ execute checkQuantities บนทุกรายการในอาร์เรย์ quantities
จากนั้น เราพิมพ์ผลลัพธ์ของเมธอด filter() และใช้ list() เพื่อแปลงเป็นรายการ นี่สำคัญเพราะ filter() คืนค่าออบเจ็กต์ที่กรองแล้ว ไม่ใช่รายการ ดังนั้น หากเราต้องการดูข้อมูลของเรา เราต้องแปลงเป็นรายการ
ตามที่เห็น โค้ดของเราคืนค่าสองค่า: 17 และ 14 แต่ละค่าต่ำกว่า 20 ซึ่งหมายความว่าโปรแกรมของเราทำงานตามที่ตั้งใจไว้
มาผ่านอีกตัวอย่างเพื่อแสดงว่ามีธอดนี้ทำงานอย่างไร สมมติเราคือครูสอนเต้นและต้องการทราบอายุของทุกคนในชั้นเรียนที่อยู่ระหว่าง 7 ถึง 10 ปี รวมทั้ง 7 และ 10 เราสามารถใช้โค้ดต่อไปนี้เพื่อรับข้อมูลนี้:
student_ages = [7, 9, 8, 10, 11, 11, 8, 9, 12] def checkAges(ages): if ages >= 7 and ages <= 10: return True else: return False filtered_ages = filter(checkAges, student_ages) print(list(filtered_ages))
โค้ดของเราคืนค่า: [7, 9, 8, 10, 8, 9] ตามที่เห็น โปรแกรมของเราได้กรองนักเรียนที่อายุระหว่าง 7 ถึง 10 ปีออกจากรายการองค์ประกอบของเรา รวมทั้ง 7 และ 10 รายการที่ได้ประกอบด้วยข้อมูลที่กรองแล้ว
Python Filter กับ Lambda
เพื่อทำให้การกรองของเรามีประสิทธิภาพมากขึ้น เราสามารถใช้ฟังก์ชัน Lambda แบบ map รายการ Lambda เป็นฟังก์ชันพิเศษที่ถูกกำหนดโดยไม่มีชื่อ และสามารถใช้เขียนฟังก์ชันนิรนาม (anonymous functions) สั้นๆ แบบบรรทัดเดียวใน Python ได้
ดังนั้น มาใช้ตัวอย่างจำนวนหนังสือพิมพ์จากข้างต้น ในตัวอย่างนั้น เราสร้างฟังก์ชันที่ตรวจสอบว่าเรามีฉบับน้อยกว่า 20 ฉบับของหนังสือพิมพ์ในสต็อกและใช้ filter() เพื่อ execute ฟังก์ชันนั้นบนรายการหนังสือพิมพ์ของเรา จากนั้น โปรแกรมของเราคืนค่ารายการของหนังสือพิมพ์ทุกฉบับที่เรามีน้อยกว่า 20 ฉบับ
เราสามารถใช้ฟังก์ชัน Lambda เพื่อทำการกระทำเดียวกันนี้ แต่มีประสิทธิภาพมากขึ้น นี่คือโค้ดที่เราสามารถใช้ได้:
quantities = [25, 49, 21, 17, 14, 28] filtered_mags = filter(lambda mag: mag < 20, quantities) print(list(filtered_mags))
โค้ดของเราคืนค่า: [17, 14].
ตามที่เห็น ผลลัพธ์ของเราเหมือนเดิม แต่โค้ดของเราสั้นลงอย่างมาก แทนที่จะกำหนดฟังก์ชันทั้งฟังก์ชัน เราใช้ Lambda เพื่อกำหนดฟังก์ชันบรรทัดเดียว
ฟังก์ชันบรรทัดเดียวนี้ตรวจสอบว่าเรามีฉบับน้อยกว่า 20 ฉบับของหนังสือพิมพ์ในสต็อก และคืนค่า True ให้ filter() iterator หากเป็นเช่นนั้น หลังจาก execute โปรแกรมของเราคืนค่ารายการพร้อมสองค่า: 17 และ 14
สรุป
ฟังก์ชัน filter() ของ Python สามารถใช้กรองออบเจ็กต์ iterable ตามชุดเกณฑ์ที่กำหนดไว้ล่วงหน้าและคืนค่า iterable ที่กรองแล้ว เมธอดนี้อาจมีประโยชน์หากคุณมีรายการข้อมูลที่คุณต้องการดึงค่าเฉพาะที่ตรงตามเกณฑ์บางอย่าง
ในคู่มือนี้ เราพูดถึงไวยากรณ์สำหรับเมธอด filter() และวิธีการใช้งานใน Python เราสำรวจตัวอย่างของ filter() ในการทำงานหลายตัวอย่าง แล้วเราดูว่า filter() สามารถใช้กับฟังก์ชัน Lambda ของ Python เพื่อทำให้โค้ดของเรามีประสิทธิภาพมากขึ้น
ตอนนี้คุณพร้อมที่จะใช้ filter() อย่างมืออาชีพ Python แล้ว!