ก่อนหน้านี้ในเว็บ StackPython เคยปล่อยบทความเรื่องของ Itertools ที่พูดถึงเรื่อง Loop ไป แต่มันมีบางเคสที่เราอาจจะเช็ค หรือค้นหาอะไรบ้างใน List แล้วเราต้องมาเขียน Logic หลายบรรทัดหลายเรื่องมาก ๆ แล้วพอมาเจอ Function อย่าง any และ all ที่บอกเลยว่ามันช่วยได้เยอะมาก ๆ วันนี้อยากจะพามาทำความรู้จักกับ any และ all ใน Python กัน
my_data = [2,6,4,5,8]
has_even = False
for item in my_data :
if item % 2 == 0:
has_even = True
จาก Code ด้านบน เราเป็นตัวอย่างที่เราต้องการหาว่า ใน List มีเลขคู่อยู่หรือไม่ ถ้าเราคิดเร็ว ๆ ปกติ เราก็น่าจะต้องสร้าง Flag ขึ้นมาหนึ่งตัว และ Loop เข้าไป และในนั้นเราเช็คหาเลขคู่ ถ้ามีก็ให้มัน Update Flag ให้เป็น True สุดท้าย เมื่อโปรแกรมทำงานจบ เราก็สามารถใช้ Flag ในการเช็คต่อได้ แต่จะเห็นว่า กว่าจะเช็คได้ มันต้องมานั่งคิดว่า เราจะเช็คยังไงดี ซึ่งมันเสียเวลามาก ๆ ทำให้เราไม่ได้โฟกัสกับ Logic ของงานเราจัง ๆ สักที
all และ any เป็น Built-in Function ของ Python ที่เราสามารถเรียกเข้ามาใช้งานได้ โดยที่เราไม่ต้อง Import ใด ๆ ทั้งสิ้น ซึ่งมันจะรับ Iterator เข้าไป และให้ค่าออกมาเป็น Boolean ค่าหนึ่ง
> bool_list = [True, True]
> all(bool_list)
True
คำสั่งแรกคือ all ที่เป็นคำสั่งสำหรับการเช็ค ว่าทั้งหมดมันเป็นจริงหรือไม่ จากตัวอย่างด้านบน เราลองสร้าง List ของ Boolean มา และเราเอาเข้าไปใส่ในคำสั่ง all ซึ่ง ผลที่ได้ออกมามันจะเป็น True ซึ่ง คำสั่งนี้มันจะให้ค่ากลับมาเป็น True เมื่อ ทั้งหมดที่เราใส่ลงไปใน all เป็น True ทั้งหมด ทำให้ all ในที่นี้เลยให้ออกมาเป็น True นั่นเอง
my_data = [2,6,4,5,8]
is_all_even = all(item % 2 == 0 for item in my_data)
เวลาเราเอามาใช้งานจริง ๆ เราก็สามารถยัด Iterator ออกมาเช็คได้เลย ในที่นี้เรายัด List Comprehension เข้าไป ซึ่งมันจะได้ออกมาเป็น List ซึ่งเป็น Iterator แบบหนึ่งเช่นกัน ทำให้มันก็จะใส่เข้าไปใน all ได้ ซึ่งผลลัพธ์ที่ได้จาก Code ด้านบน ก็จะเป็น False นั่นเอง เพราะใน List Comprehension เราเช็คว่า ตัวเลขที่ใส่เข้ามา Modulo ด้วย 2 มันเป็น 0 หรือไม่ ก็คือการเช็คว่ามันเป็นเลขคู่มั้ยนั่นเอง มันก็จะได้เป็น List ออกมา แต่มันจะมีเลข 5 ที่ไม่ใช่ ทำให้ all เลยคืนค่ากลับมาเป็น False นั่นเอง
อีกคำสั่งคือ any ที่เป็นคำสั่งตรงข้ามกับ all เลย เพราะมัน จะคืนค่ากลับมาเป็น True เมื่อมีสักตัวเป็น True
my_data = [2,6,4,5,8]
is_even = any(item % 2 == 0 for item in my_data)
จากตัวอย่างเหมือนกับตัวอย่างแรก แต่เราลองเปลี่ยนเป็น any แทน ในรอบนี้ มันจะได้กลับมาเป็น True แทน เพราะ มันมีอย่างน้อยหนึ่งตัวที่เป็นเลขคู่ ซึ่งใน List ก็คือ เกือบทั้งหมดเป็นเลขคู่หมดเลย ยกเว้นเลข 5
วันนี้เราพาไปแนะนำกับคำสั่ง any และ all ที่เป็น Built-in Function ที่บางที เราอาจจะไม่นึกถึงเวลาเขียนแน่ ๆ ทำให้สุดท้าย เราก็ต้องชอบเขียนมันตรง ๆ แต่ Code มันก็จะดูรก ๆ เยอะไปหน่อย ถ้าเอามาใช้ มันก็จะทำให้ Code เราดูดีขึ้นแหละ ถ้าอยากจะอ่านเพิ่มเติมเกี่ยวกับ any และ all ได้ที่ Python Document
กิจกรรมที่กำลังจะมาถึง
ไม่พลาดกิจกรรมเด็ด ๆ ที่น่าสนใจ
Event นี้จะเริ่มขึ้นใน April 25, 2023
รายละเอียดเพิ่มเติม/สมัครเข้าร่วมคอร์สเรียนไพธอนออนไลน์ที่เราได้รวบรวมและได้ย่อยจากประสบการณ์จริงและเพื่อย่นระยะเวลาในการเรียนรู้ ลองผิด ลองถูกด้วยตัวเองมาให้แล้ว เพราะเวลามีค่าเป็นอย่างยิ่ง พร้อมด้วยการซัพพอร์ตอย่างดี