การเข้าใจฟังก์ชัน 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 ของคุณเพื่อสร้างโค้ดที่สะอาดและมีประสิทธิภาพมากขึ้น ขอให้สนุกกับการเขียนโค้ด!