การใช้ * และ zip เพื่อ 'unzip'
ตอนนี้รู้วิธีใช้ zip() และวิธีแสดงค่าจาก zip object แล้ว
มาลองเล่นกับ zip() อีกสักหน่อย ใน Python ไม่มีฟังก์ชัน unzip สำหรับทำสิ่งตรงข้ามกับ zip() โดยตรง อย่างไรก็ตาม เราสามารถย้อนกระบวนการที่ zip ทำไว้ได้ โดยใช้ zip() ร่วมกับ * ซึ่ง * จะ unpack iterable เช่น list หรือ tuple ให้เป็น positional arguments ในการเรียกฟังก์ชัน
ในแบบฝึกหัดนี้ จะได้ใช้ * ในการเรียก zip() เพื่อ unpack tuple ที่ zip() สร้างขึ้น
ได้โหลด tuple ของสตริงสองชุดไว้ล่วงหน้าแล้ว ได้แก่ mutants และ powers
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python Toolbox
คำแนะนำการฝึกหัด
- สร้าง
zipobject โดยใช้zip()กับmutantsและpowersตามลำดับนี้ แล้วกำหนดผลลัพธ์ให้กับz1 - แสดง tuple ใน
z1โดย unpack ให้เป็น positional arguments ด้วยตัวดำเนินการ*ในการเรียกprint() - เนื่องจากการเรียก
print()ก่อนหน้าจะทำให้ elements ในz1หมดไป ให้สร้างzipobject ที่กำหนดไว้ก่อนหน้าขึ้นใหม่ และกำหนดผลลัพธ์ให้กับz1อีกครั้ง - 'Unzip' tuple ใน
z1โดย unpack ให้เป็น positional arguments ด้วยตัวดำเนินการ*ในการเรียกzip()แล้วกำหนดผลลัพธ์ให้กับresult1และresult2ตามลำดับนี้ - คำสั่ง
print()สุดท้ายจะแสดงผลการเปรียบเทียบresult1กับmutantsและresult2กับpowersคลิกส่งคำตอบเพื่อดูว่าresult1และresult2ที่ unpack แล้วเทียบเท่ากับmutantsและpowersตามลำดับหรือไม่
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a zip object from mutants and powers: z1
z1 = ____
# Print the tuples in z1 by unpacking with *
print(____)
# Re-create a zip object from mutants and powers: z1
z1 = ____
# 'Unzip' the tuples in z1 by unpacking with * and zip(): result1, result2
result1, result2 = ____
# Check if unpacked tuples are equivalent to original tuples
print(result1 == mutants)
print(result2 == powers)