ฟังก์ชัน filter() ใช้สำหรับกรอง (Filter) สมาชิกจาก iterable ตามเงื่อนไขที่กำหนด คืนค่าเป็น iterator ที่มีเฉพาะสมาชิกที่ผ่านเงื่อนไข
ไวยากรณ์
filter(function, iterable) # function: ฟังก์ชันที่รับค่า 1 ค่า คืนค่า True/False # iterable: ข้อมูลที่ต้องการกรอง (list, tuple, etc.)
ตัวอย่าง: กรองเฉพาะเลขคู่
สร้างฟังก์ชัน findeven ตรวจสอบว่าเลขคู่หรือไม่ แล้วนำไปใช้กับ filter()
ตัวอย่าง
listA = [15, 8, 21, 13, 32]
def findeven(x):
if x % 2 != 0:
return False
else:
return True
evenum = filter(findeven, listA)
for x in evenum:
print(x)
ผลลัพธ์
8 32
การเขียนแบบสั้นกว่าด้วย Lambda
listA = [15, 8, 21, 13, 32] evenum = filter(lambda x: x % 2 == 0, listA) print(list(evenum)) # [8, 32]
การแปลงเป็นลิสต์
filter() คืนค่าเป็น iterator ต้องใช้ list() หากต้องการเป็นลิสต์จริง
# กรองสตริงที่ยาวกว่า 3 ตัวอักษร words = ['cat', 'elephant', 'dog', 'hippopotamus'] long_words = list(filter(lambda w: len(w) > 3, words)) print(long_words) # ['elephant', 'hippopotamus']
หมายเหตุ: ใน Python 3 filter() คืนค่า iterator (Lazy) ไม่ใช่ลิสต์เหมือน Python 2