การเข้าใจฟังก์ชัน Transpose/Unzip ใน Python

เมื่อทำงานกับข้อมูลใน Python คุณอาจพบว่าต้องการที่จะจัดการกับ list และ tuple อยู่บ่อยครั้ง หนึ่งในปฏิบัติการทั่วไปคือการเปลี่ยน list ที่เป็น tuple 2 รายการให้กลายเป็นสอง list แยก นี่อาจมีความสำคัญสำหรับการวิเคราะห์ข้อมูล ซึ่งคุณอาจต้องการแยกคีย์ออกจากค่า หรืออาจหมายถึงการจัดประเภทข้อมูลเพื่อให้จัดการได้ง่ายขึ้น

ปัญหา

ลองจินตนาการว่าคุณมี list ของ tuples เช่นต่อไปนี้:

original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

เป้าหมายของคุณคือการแปลง list นี้ให้เป็นสอง list แยก:

  • List หนึ่งควรประกอบด้วยองค์ประกอบแรก: ['a', 'b', 'c', 'd']
  • List ที่สองควรประกอบด้วยองค์ประกอบที่สอง: [1, 2, 3, 4]

ปฏิบัติการนี้สามารถอธิบายได้ว่าเป็นการ “unzip” tuple หรือการใช้ฟังก์ชัน transpose ซึ่งเป็นการสลับแกนของข้อมูล

วิธีการแก้ปัญหา

โชคดีที่ Python มีฟังก์ชันในตัวที่เรียกว่า zip ซึ่งสามารถช่วยในเรื่องนี้ได้ มาทำความเข้าใจวิธีการใช้มันในทั้ง Python 2.x และ 3.x กันเถอะ

การใช้ zip ใน Python 2.x

ใน Python 2.x zip จะทำหน้าที่เป็นการกลับกันเมื่อคุณประยุกต์ใช้ออปเรเตอร์พิเศษที่เรียกว่า unpacking operator * นี่คือวิธีที่คุณสามารถใช้มันกับ list tuple ต้นฉบับของคุณ:

result = zip(*original)
# ผลลัพธ์จะเป็น: (['a', 'b', 'c', 'd'], [1, 2, 3, 4])
  • ออปเรเตอร์ * จะทำการเปิด unpack tuple ออกเป็นอาร์กิวเมนต์แยกสำหรับฟังก์ชัน zip
  • ซึ่งจะทำให้คุณได้เวอร์ชันที่ถูก transpose โดยตรง

การใช้ zip ใน Python 3.x

Python 3.x เปลี่ยนแปลงพฤติกรรมของ zip เล็กน้อยโดยการคืนค่าผลลัพธ์เป็น lazy iterator แทนที่จะเป็น list อย่างไรก็ตามยังง่ายต่อการเปลี่ยนให้เป็น list เพื่อให้ได้ผลลัพธ์เดียวกันกับใน Python 2.x นี่คือโค้ด:

result = list(zip(*original))
# ผลลัพธ์จะเป็น: (['a', 'b', 'c', 'd'], [1, 2, 3, 4])
  • โดยการหุ้ม zip(*original) ด้วย list() คุณจะเปลี่ยน lazy iterator ให้เป็นรูปแบบ list สำหรับการใช้งานที่ง่ายขึ้น

บทสรุป

ตอนนี้คุณมีความเข้าใจที่ชัดเจนเกี่ยวกับวิธีการ transpose หรือ “unzip” list ของ tuple 2 รายการใน Python! ไม่ว่าคุณจะทำงานใน Python 2.x หรือ 3.x ฟังก์ชัน zip เมื่อรวมกับ unpacking operator จะมอบวิธีการที่สวยงามในการแยกองค์ประกอบเพื่อให้การจัดการข้อมูลง่ายขึ้น

คุณสามารถนำวิธีนี้ไปใช้ในโครงการ Python ของคุณเพื่อสร้างโค้ดที่สะอาดและมีประสิทธิภาพมากขึ้น ขอให้สนุกกับการเขียนโค้ด!