วิธีใช้ฟังก์ชัน Zip ใน Python

How Use Zip Function Python



บทความนี้จะกล่าวถึงคำแนะนำเกี่ยวกับฟังก์ชัน zip ที่มีอยู่ในไลบรารีโมดูลมาตรฐานของ Python วิธีนี้ช่วยให้คุณสามารถรวมและจับคู่องค์ประกอบของออบเจ็กต์ที่ทำซ้ำได้หลายรายการ จากนั้นคุณสามารถเรียกใช้ตรรกะเพิ่มเติมในคู่เหล่านี้ ในหลายกรณี การใช้ฟังก์ชัน zip จะมีประสิทธิภาพและสะอาดกว่าการใช้ฟังก์ชัน zip ที่ซ้อนกันหลายรายการ

เกี่ยวกับ 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 สามารถจำลองได้โดยใช้คำสั่งลูปและเงื่อนไข อย่างไรก็ตาม มันช่วยในการรักษาโค้ดให้เป็นระเบียบและสะอาดขึ้น โดยการลบคำฟุ่มเฟือยที่ไม่จำเป็นและประโยคที่ซ้ำซากจำเจ