วิธีบีบอัดสองรายการใน python
บ่อยครั้งที่คุณอาจสนใจที่จะบีบอัด (หรือ “รวม”) สองรายการใน Python โชคดีที่ทำได้ง่ายโดยใช้ฟังก์ชัน zip()
บทช่วยสอนนี้แสดงตัวอย่างการใช้งานฟังก์ชันนี้ในทางปฏิบัติหลายตัวอย่าง
ตัวอย่างที่ 1: บีบอัดสองรายการที่มีความยาวเท่ากันให้เป็นรายการเดียว
ไวยากรณ์ต่อไปนี้แสดงวิธีบีบอัดสองรายการที่มีความยาวเท่ากันให้เป็นรายการเดียว:
#define list a and list b a = ['a', 'b', 'c'] b = [1, 2, 3] #zip the two lists together into one list list( zip (a,b)) [('a', 1), ('b', 2), ('c', 3)]
ตัวอย่างที่ 2: บีบอัดสองรายการที่มีความยาวเท่ากันลงในพจนานุกรม
ไวยากรณ์ต่อไปนี้แสดงวิธีบีบอัดสองรายการที่มีความยาวเท่ากันลงในพจนานุกรม:
#define list of keys and list of values keys = ['a', 'b', 'c'] values = [1, 2, 3] #zip the two lists together into one dictionary dict( zip (keys, values)) {'a': 1, 'b': 2, 'c': 3}
ตัวอย่างที่ 3: บีบอัดสองรายการที่มีความยาวไม่เท่ากัน
หากทั้งสองรายการของคุณมีความยาวไม่เท่ากัน zip() จะถูกตัดทอนให้เหลือความยาวของรายการที่สั้นกว่า:
#define list a and list b a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] #zip the two lists together into one list list( zip (a,b)) [('a', 1), ('b', 2), ('c', 3)]
หากคุณต้องการป้องกันไม่ให้ zip() ตัดทอนตามความยาวของรายการที่สั้นที่สุด คุณสามารถใช้ฟังก์ชัน zip_longest() จากไลบรารี itertools แทนได้
ตามค่าเริ่มต้น ฟังก์ชันนี้จะเติม “ไม่มี” สำหรับค่าที่หายไป:
from itertools import zip_longest #define list a and list b a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] #zip the two lists together without truncating to length of shortest list list( zip_longest (a, b)) [('a', 1), ('b', 2), ('c', 3), ('d', None)]
อย่างไรก็ตาม คุณสามารถใช้อาร์กิวเมนต์ fillvalue เพื่อระบุค่าเติมอื่นที่จะใช้:
#define list a and list b a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] #zip the two lists together, using fill value of '0' list( zip_longest (a, b, fillvalue= 0 )) [('a', 1), ('b', 2), ('c', 3), ('d', 0)]
คุณสามารถดูเอกสารฉบับเต็มสำหรับฟังก์ชัน zip_longest() ได้ที่นี่