10 เทคนิค Python One-Liners เขียนโค้ดสั้น กระชับ และทำงานไวขึ้น

เบื่อกับการต้องพิมพ์โค้ดยาวๆ หรือเปล่า? หากคุณต้องการทำงานให้เสร็จโดยใช้จำนวนคำที่น้อยลง คุณมาถูกทางแล้ว นี่คือ 10 เทคนิค Python One-Liners ที่ใช้งานได้จริง ซึ่งแต่ละรายการจะช่วยปรับปรุงโค้ดของคุณให้ดีกว่าการเขียนแบบหลายบรรทัดทั่วไป ช่วยให้คุณประหยัดเวลาและลดความซับซ้อนของโปรแกรมได้อย่างเห็นผล
อย่างไรก็ตาม มีข้อกำหนดเบื้องต้นบางประการสำหรับตัวอย่างเหล่านี้ โดยในข้อ 2, 6, 9 และ 10 จำเป็นต้องมีการ import itertools, import functools และ from collections import Counter ไว้ที่ต้นสคริปต์ นอกจากนี้ควรระวังเวอร์ชันขั้นต่ำของ Python ที่ระบุไว้ในข้อ 3, 5, 6 และ 10 เพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้นกับ Python เวอร์ชันเก่า
มาดู 10 เทคนิคที่จะช่วยให้ชีวิตนักพัฒนาง่ายขึ้นกันเลย
1. ลบรายการที่ซ้ำกันโดยคงลำดับเดิมไว้
เทคนิคนี้ใช้แทนการวนลูปด้วยตนเองเพื่อหาค่าที่ไม่ซ้ำกัน นอกจากนี้ยังรักษาลำดับเดิมของข้อมูลไว้ได้ ซึ่งแตกต่างจากการใช้ list(set(items)) ที่ลำดับมักจะเพี้ยนไป
unique = list(dict.fromkeys(items))คำสั่งนี้จะสร้าง Dictionary จากไอเทมต่างๆ โดยใช้เป็น Key ซึ่งจะคัดรายการที่ซ้ำออกโดยอัตโนมัติในขณะที่ยังรักษาลำดับการปรากฏครั้งแรกไว้ (รองรับตั้งแต่ Python 3.7) จากนั้นจึงแปลง Keys กลับมาเป็น List
2. ทำให้ List ของ List แบนราบ (Flatten)
วิธีนี้เร็วกว่าและอ่านง่ายกว่าการใช้ Nested Loops หรือเทคนิค sum(nested, []) ที่มักทำงานช้าลงเมื่อข้อมูลมีปริมาณมาก
flat = list(itertools.chain.from_iterable(nested))โค้ดนี้จะวนลูปผ่านแต่ละ Sublist ในลักษณะ Lazy ตามลำดับ และรวบรวมทุกองค์ประกอบเข้าเป็น List เดียวอย่างมีประสิทธิภาพ
3. การผสาน Dictionary
แทนที่จะใช้ .copy() ตามด้วย .update() หรือการ Unpacking {**a, **b} ที่อ่านยาก คุณสามารถใช้ตัวดำเนินการที่ชัดเจนได้ทันทีใน Python 3.9 ขึ้นไป
merged = defaults | overridesDictionary ใหม่จะถูกสร้างขึ้นจากการรวมข้อมูลทั้งสองชุด หากมี Key ซ้ำกัน ค่าจาก Dictionary ฝั่งขวา (overrides) จะถูกนำมาใช้เป็นค่าหลัก
4. ตรวจสอบเงื่อนไขในคอลเลกชันด้วย Short-Circuiting
คำสั่งนี้จะหยุดทำงานทันทีที่เจอข้อมูลที่ตรงเงื่อนไขตัวแรก โดยไม่ต้องสแกนข้อมูลทั้งหมด ช่วยให้โค้ดสะอาดและทำงานเร็วกว่าการสร้าง Flag ในลูป
has_negative = any(x < 0 for x in values)ฟังก์ชันจะคืนค่า True ทันทีที่พบองค์ประกอบตามเงื่อนไข และคืนค่า False หากไม่พบเลย (หรือใช้ all() สำหรับการตรวจสอบว่าตรงตามเงื่อนไขทุกตัวหรือไม่)
5. คำนวณครั้งเดียว กรองออก และจัดเก็บ
การใช้ Walrus Operator ช่วยหลีกเลี่ยงการเรียกฟังก์ชันเดิมซ้ำสองครั้ง ทั้งในขั้นตอนการกรองและการเก็บค่า ช่วยลดความไร้ประสิทธิภาพที่มักพบใน List Comprehensions (รองรับ Python 3.8+)
results = [y for x in data if (y := transform(x)) is not None]โค้ดนี้จะใช้ transform กับแต่ละองค์ประกอบแล้วกำหนดค่าให้ y ทันที โดยจะเก็บเฉพาะผลลัพธ์ที่ไม่เป็น None เท่านั้น
6. เพิ่ม Memoization ให้ฟังก์ชันทันที
Decorator เพียงบรรทัดเดียวนี้สามารถเปลี่ยนฟังก์ชัน Recursive ที่ทำงานช้า หรือการคำนวณซ้ำซ้อนให้กลายเป็นการค้นหาข้อมูลที่รวดเร็ว (Python 3.9+ หรือใช้ @lru_cache(maxsize=None) ในเวอร์ชันเก่า)
@functools.cacheระบบจะเก็บค่าที่ส่งกลับสำหรับอาร์กิวเมนต์แต่ละชุดไว้ เมื่อมีการเรียกใช้ด้วยค่าเดิมอีกครั้ง จะดึงผลลัพธ์จากหน่วยความจำมาตอบทันทีโดยไม่ต้องคำนวณใหม่
7. ทรานสโพสเมทริกซ์ (Transpose a Matrix)
สลับแถวและคอลัมน์ของตารางข้อมูลได้ในบรรทัดเดียว โดยไม่ต้องเขียนตัวเลขดัชนีหรือพึ่งพา NumPy เหมาะสำหรับการปรับรูปแบบตารางอย่างรวดเร็ว
แต่ละแถวจะถูก Unpacked ส่งเข้าไปใน zip ซึ่งจะทำหน้าที่จับกลุ่มองค์ประกอบลำดับเดียวกันจากทุกแถวเข้าด้วยกันจนกลายเป็นคอลัมน์
8. ค้นหา Key ที่มี Value สูงสุดใน Dictionary
บรรทัดนี้สามารถใช้แทนการเขียนลูปเพื่อเปรียบเทียบค่าสูงสุดและเก็บ Key ไว้ด้วยตนเอง
best = max(scores, key=scores.get)โปรแกรมจะวนลูปผ่าน Keys ทั้งหมดใน Dictionary และส่งคืน Key ที่มีค่า Value สูงที่สุดออกมา
9. ค้นหาไอเทมที่ปรากฏบ่อยที่สุด
ลดขั้นตอนการนับด้วย Dictionary และการเรียงลำดับด้วยตนเอง โดยใช้เครื่องมือมาตรฐานที่ออกแบบมาเพื่อการนี้โดยเฉพาะ
top3 = Counter(words).most_common(3)คำสั่งนี้จะนับจำนวนการปรากฏของแต่ละองค์ประกอบ และส่งคืน List ของ Tuple (item, count) 3 อันดับแรกที่พบมากที่สุด
10. แบ่ง Iterable ออกเป็นกลุ่มขนาดคงที่ (Chunks)
ช่วยลดความผิดพลาดจากการคำนวณ Slicing เหมาะสำหรับการเตรียมข้อมูลเพื่อส่งเข้า API หรือโมเดลในลักษณะ Batch (รองรับ Python 3.12+)
batches = list(itertools.batched(records, 100))โค้ดจะจัดกลุ่มข้อมูลเป็น Tuple ขนาดตามที่กำหนด (เช่น 100 องค์ประกอบ) โดยกลุ่มสุดท้ายจะเก็บข้อมูลส่วนที่เหลือทั้งหมด
สรุป
เทคนิค One-Liners เหล่านี้ไม่ใช่เรื่องมหัศจรรย์ แต่คือการใช้ประสิทธิภาพของภาษา Python อย่างเต็มที่เพื่อสร้างคำสั่งที่มีพลังและกระชับ การฝึกใช้เครื่องมือเหล่านี้ไม่เพียงแต่ช่วยให้โค้ดสะอาดขึ้น แต่ยังช่วยเพิ่มประสิทธิภาพในการพัฒนาซอฟต์แวร์ของคุณในระยะยาวอีกด้วย
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
