5 Python Itertools ที่ Developer ควรรู้จักไว้

26-ม.ค.-22

คัมภีร์เทพ IT

การทำซ้ำ (Iteration) ดูจะเป็นสิ่งที่ Developer ทุกคนรู้จักและเคยใช้งานมาแล้วทุกคน ซึ่ง Python เองก็มี Itertools ไว้ให้ใช้งานอยู่แล้ว นอกจากจะเพิ่มคความสะดวกในการทำงานแล้ว ยังลดเวลาในการเขียน Code อีกด้วย และบทความนี้จะมาแนะนำ 5 Python Itertools ที่ Developer ควรรู้จักไว้

1. Count(start=0, step=1)

Itertools Package ที่มาพร้อมกับตัว Iterator ที่สามารถใช้ในการวนซ้ำได้แบบไม่รู้จบ ซึ่งหมายความว่า คุณจะต้องเพิ่ม Exit Condition ใน Code ของคุณ หากคุณต้องการที่จะหลุดออกจากการวนซ้ำ

สำหรับ Count Iterator จะทำการ Return ค่า ที่มีระยะห่างระหว่างค่าที่เท่ากันกลับมาให้ โดยเริ่มต้นจากตัวเลขที่คุณส่งเข้ามาเป็น Parameter เริ่มต้น นอกจากนี้ Count ยังสามารถรับ Step Parameter อีกด้วย หากคุณใช้ Step = 1 ทุก ๆ  ตัวเลขที่ต่อเนื่องกัน ก็จะเพิ่มค่าขึ้นทีละ 1 ไปเรื่อย ๆ

ลองมาดูตัวอย่างด้านล่างนี้:

2. Cycle(iterable)

สำหรับ Cycle Iterator จาก Itertools จะช่วยให้คุณสร้างตัว Iterator ที่จะวนซ้ำไปตามลำดับของ Items ได้อย่างไม่สิ้นสุด

โปรดทราบว่า คุณจำเป็นต้องระบุ Exit Condition เพื่อให้หลุดออกจากการวนซ้ำ (หรือในบางกรณีมี Bug ใน Code ของคุณ)

จากตัวอย่างด้านบน แสดงให้เห็นว่า String XYZ ถูก Print ออกมา โดยใช้ Itertool ซึ่งก็คือ cycle() ซึ่ง Exit Condition มีการระบุว่า หาก Count มากกว่า 7 แล้ว การวนซ้ำก็จะหยุดลงโดยใช้คำสั่ง Break ซึ่งอยู่ใน Code บรรทัดที่ 6 นั่นเอง

3. Repeat(object[, times])

สำหรับ Repeat Iterators จะ Return Object เว้นแต่คุณจะระบุค่าของ Times Argument สำหรับระบุจำนวนครั้งที่ให้วนซ้ำ ตามที่แสดงในคำจำกัดความด้านล่างนี้

itertools.repeat(object[, times])

มันค่อนข้างคล้ายกับ Cycle เพียงแต่ว่า มันจะไม่วนซ้ำ Set ของค่าไปเรื่อย ๆ และเพื่อให้เข้าใจมากขึ้น ลองมาดูตัวอย่างนี้กัน:

ในตัวอย่างด้านบน Times Parameter คือ 5 หลังจากใช้ next() Operation บน my_iterator แล้ว StopIteration จะถูกแสดงออกมา และการวนซ้ำของคุณก็จะหยุดลง

โปรดทราบว่า ความแตกต่างหลัก ๆ ของ Tool ตัวนี้ กับ 2 Itertools ก่อนหน้านั้น ก็คือ คุณไม่จำเป็นต้องเขียน Code อย่างชัดเจนเพื่อให้หลุดออกจากการวนซ้ำ แต่คุณจะต้อง Set ค่าของ Times Parameter และดู StopIteration Error เพื่อหลุดออกจากการวนซ้ำ ซึ่งนี่ถือเป็นเรื่องปกติสำหรับตัว Iterator ทุกตัวที่คุณสร้างโดยใช้ repeat()

4. Accumulate(iterable[, func, *, initial=None])

Accumulate Iterator จะ Return ผลรวมสะสม (Accumulated Sums) หรือผลลัพธ์สะสม (Accumulated Results) ของ 2-Argument Function ที่คุณส่งผ่านเพื่อรวมค่าสะสม ค่า Default ของการสะสมคือการเพิ่มขึ้น (Addition) ดังนั้นเรามาลองดูกัน:

5. Dropwhile(predicate, iterable)

นี่ก็เป็นอีกหนึ่ง Itertool ที่มีประโยชน์ ซึ่งคือ Dropwhile สำหรับ Iterator นี้ จะ Drop Elements ตราบใดที่ Filter Criteria เป็น True ด้วยเหตุนี้ คุณจะไม่เห็นผลลัพธ์ใด ๆ จากตัว Iterator นี้จนกว่า Predicate จะกลายเป็น False การทำเช่นนี้อาจทำให้ Start-up Time ยาวนานขึ้น ซึ่งเป็นเรื่องที่คุณควรทราบไว้

มาดูตัวอย่างจาก Documentation ของ Python กัน:

Function นี้จะ Return ค่า True ถ้า x มีค่าน้อยกว่า 5

นอกนั้นมันจะ Return ค่าเป็น False ซึ่ง Dropwhile Function จะวน Loop List และส่งผ่านแต่ละ Element ไปยัง Lambda หาก Lambda มีการ Return ค่าเป็น True ค่านั้นก็จะ Drop ออกมาให้ เมื่อคุณถึงเลข 6 แล้ว Lambda จะ Return ค่า "False" จากนั้น คุณจะเก็บค่า 6 และค่าทั้งหมดที่ตามมาไว้ทั้งหมด

สรุป

นี่เป็น Python Itertools ส่วนหนึ่งที่มีประโยชน์ และเป็นวิธีที่ยอดเยี่ยมในการที่คุณไม่ต้องเขียนตัว Custom Iterators/Functions โดยการใช้ For อีกทั้งยังช่วยประหยัดเวลาในการเขียน Code ได้อีกด้วย

ที่มา: https://varun-singh-01.medium.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด