วิธีบีบอัดสองรายการใน 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() ได้ที่นี่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *