เกี่ยวกับ Zip Function
ตามที่ระบุไว้ก่อนหน้านี้ ฟังก์ชัน zip ถูกใช้เพื่อสร้างคู่จากองค์ประกอบของอ็อบเจ็กต์ที่ทำซ้ำได้หลายรายการ พิจารณาตัวอย่างด้านล่างเพื่อทำความเข้าใจไวยากรณ์พื้นฐานและการใช้ฟังก์ชัน zip:
รายการ1= ['ถึง', 'NS', 'ค']
รายการ2= ['แอปเปิ้ล', 'ลูกบอล', 'แมว']
ซิป= zip(รายการ1,รายการ2)
พิมพ์ (รายการ(ซิป))
สองคำสั่งแรกในตัวอย่างโค้ดด้านบนกำหนดรายการสองรายการที่มีองค์ประกอบบางอย่าง ถัดไป ฟังก์ชัน zip ถูกใช้โดยส่งตัวแปร list1 และ list2 เป็นอาร์กิวเมนต์ นี่คือไวยากรณ์หลักของฟังก์ชัน zip คุณเพียงแค่ต้องส่งผ่านรายการหรือคำสั่ง iterables ที่ถูกต้องอื่น ๆ เป็นอาร์กิวเมนต์ที่มีองค์ประกอบที่คุณต้องการรวม สุดท้าย คำสั่ง print จะใช้เพื่อรับผลลัพธ์ของตัวแปร zip หลังจากรันโค้ดตัวอย่างที่กล่าวถึงข้างต้น คุณควรได้รับผลลัพธ์ต่อไปนี้:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]
โปรดทราบว่าฟังก์ชัน zip จะคืนค่าออบเจ็กต์ประเภท zip ไม่ใช่รายการ คุณต้องแปลงเป็นประเภท iterable ตามที่แสดงในคำสั่ง print ด้านบน
พูดง่ายๆ ก็คือ ฟังก์ชัน zip จะดึงองค์ประกอบของดัชนีเดียวกันจากสองรายการและรวมเข้าด้วยกันเป็นคู่ในทูเพิล ดังนั้นองค์ประกอบที่ 0 จาก list1 จะถูกรวมเข้ากับองค์ประกอบที่ 0 ของ list2 องค์ประกอบที่ 1 จาก list1 จะรวมกับองค์ประกอบที่ 1 ของ list2 เป็นต้น ฟังก์ชัน Zip จะเลื่อนจากซ้ายไปขวาและ tuple ที่มีองค์ประกอบที่จับคู่มีดัชนีเดียวกันกับองค์ประกอบที่จัดเก็บไว้ในนั้น
การใช้ Zip เมื่อ Iterables ไม่มีองค์ประกอบจำนวนเท่ากัน
ในตัวอย่างที่กล่าวข้างต้น ทั้งสองรายการมีจำนวนองค์ประกอบเท่ากัน ในกรณีที่คุณกำลังจัดการกับโค้ดบางอย่างที่ทั้งสองรายการมีจำนวนองค์ประกอบไม่เท่ากัน ฟังก์ชัน zip จะหยุดที่องค์ประกอบสุดท้ายของรายการที่มีองค์ประกอบน้อยที่สุด
ในตัวอย่างด้านล่าง ฟังก์ชัน zip จะหยุดที่องค์ประกอบ c โดยไม่คำนึงว่า list2 จะมีองค์ประกอบมากกว่าหนึ่งรายการ
รายการ1= ['ถึง', 'NS', 'ค']
รายการ2= ['แอปเปิ้ล', 'ลูกบอล', 'แมว', 'ตุ๊กตา']
ซิป= zip(รายการ1,รายการ2)
พิมพ์ (รายการ(ซิป))
หลังจากรันโค้ดตัวอย่างที่กล่าวถึงข้างต้น คุณควรได้รับผลลัพธ์ต่อไปนี้:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]คุณสามารถใช้มากกว่าสอง Iterables เมื่อใช้ฟังก์ชัน Zip
โดยปกติ ฟังก์ชัน zip จะใช้เพื่อเปรียบเทียบสองอ็อบเจ็กต์ที่ทำซ้ำได้ อย่างไรก็ตาม คุณสามารถส่งผ่านจำนวน iterables เป็นอาร์กิวเมนต์ไปยังฟังก์ชัน zip ได้ หลักการหยุดที่องค์ประกอบสุดท้ายของรายการที่สั้นที่สุดจะยังคงมีผลบังคับใช้
รายการ1= ['ถึง', 'NS', 'ค']รายการ2= ['แอปเปิ้ล', 'ลูกบอล', 'แมว', 'ตุ๊กตา']
รายการ3= ['5', '3']
ซิป= zip(รายการ1,รายการ2,รายการ3)
พิมพ์ (รายการ(ซิป))
หลังจากรันโค้ดตัวอย่างที่กล่าวถึงข้างต้น คุณควรได้ผลลัพธ์ต่อไปนี้เป็นผล:
[('a', 'apple', '5'), ('b', 'ball', '3')]การสร้างรายการแต่ละรายการจากออบเจ็กต์ประเภท Zip
หากคุณมีอ็อบเจ็กต์ zip อยู่แล้ว คุณสามารถใช้ออบเจ็กต์นี้เพื่อเติมรายการแต่ละรายการที่เคยใช้ก่อนหน้านี้เมื่อมีการเรียกใช้ฟังก์ชัน zip เป็นครั้งแรก
รายการ1= ['ถึง', 'NS', 'ค']รายการ2= ['แอปเปิ้ล', 'ลูกบอล', 'แมว', 'ตุ๊กตา']
รายการ3= ['5', '3']
ซิป= zip(รายการ1,รายการ2,รายการ3)
l1,l2,l3= zip(*ซิป)
พิมพ์ (รายการ(l1), รายการ(l2), รายการ(l3))
หลังจากรันโค้ดตัวอย่างที่กล่าวถึงข้างต้น คุณควรได้ผลลัพธ์ต่อไปนี้เป็นผล:
['a', 'b'] ['apple', 'ball'] ['5', '3']ในตัวอย่างโค้ดด้านบน ออบเจ็กต์ zip ถูกปล่อยลมออกโดยใช้ตัวดำเนินการ * ผลลัพธ์ที่เป็นกิ่วจะถูกป้อนเข้าสู่ฟังก์ชันการเรียกใช้ zip ที่สร้างรายการดั้งเดิม โปรดทราบว่าคุณอาจไม่ได้รับองค์ประกอบทั้งหมดกลับคืนมาในรายการเดิม หากมีการใช้รายการที่มีความยาวไม่เท่ากันเมื่อสร้างวัตถุ zip ในครั้งแรก
ใช้ Zip เมื่อคุณต้องการเก็บองค์ประกอบจาก Iterable ที่ยาวที่สุด
ในหลายตัวอย่างข้างต้น คุณอาจสังเกตเห็นว่าโดยค่าเริ่มต้น ฟังก์ชัน zip จะหยุดที่องค์ประกอบสุดท้ายของ iterable ที่สั้นที่สุด เกิดอะไรขึ้นถ้าคุณต้องการให้มันวนซ้ำจนกว่าจะถึงองค์ประกอบสุดท้ายของ iterable ที่ยาวที่สุด?
ในกรณีเช่นนี้ คุณจะต้องใช้เมธอด zip_longest() จากโมดูล itertools ของ Python มันทำงานเหมือนกับฟังก์ชัน zip โดยมีความแตกต่างเพียงเล็กน้อยที่หยุดที่องค์ประกอบสุดท้ายของประเภท iterable ที่ยาวที่สุด
จาก itertools นำเข้าzip_longestรายการ1= ['ถึง', 'NS', 'ค']
รายการ2= ['แอปเปิ้ล', 'ลูกบอล', 'แมว', 'ตุ๊กตา']
รายการ3= ['5', '3']
ซิป=zip_longest(รายการ1,รายการ2,รายการ3)
พิมพ์ (รายการ(ซิป))
หลังจากรันโค้ดตัวอย่างที่กล่าวถึงข้างต้น คุณควรได้ผลลัพธ์ต่อไปนี้เป็นผล:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (ไม่มี, 'ตุ๊กตา', ไม่มี) ]ค่าที่หายไปจะถูกเติมเป็นไม่มีวัตถุชนิด คุณยังสามารถระบุค่าของคุณเองเพื่อเติมโดยส่งอาร์กิวเมนต์ fillvalue พิเศษไปยังเมธอด zip_longest
จาก itertools นำเข้าzip_longestรายการ1= ['ถึง', 'NS', 'ค']
รายการ2= ['แอปเปิ้ล', 'ลูกบอล', 'แมว', 'ตุ๊กตา']
รายการ3= ['5', '3']
ซิป=zip_longest(รายการ1,รายการ2,รายการ3,ค่าเติม='my_value')
พิมพ์ (รายการ(ซิป))
หลังจากรันโค้ดตัวอย่างที่กล่าวถึงข้างต้น คุณควรได้ผลลัพธ์ต่อไปนี้เป็นผล:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ', 'my_value')]บทสรุป
ฟังก์ชัน Zip สามารถจำลองได้โดยใช้คำสั่งลูปและเงื่อนไข อย่างไรก็ตาม มันช่วยในการรักษาโค้ดให้เป็นระเบียบและสะอาดขึ้น โดยการลบคำฟุ่มเฟือยที่ไม่จำเป็นและประโยคที่ซ้ำซากจำเจ