Python 3
for f, b in zip(foo, bar):
print(f, b)
zipหยุดเมื่อสั้นfooหรือbarหยุด
ในหลาม 3 , zip
ส่งกลับ iterator ของ tuples เช่นitertools.izipใน Python2 ที่จะได้รับรายชื่อของ tuples list(zip(foo, bar))ใช้ และเพื่อซิปจนกว่าทั้ง iterators ถูกใช้จนหมดคุณจะใช้
itertools.zip_longest
Python 2
ในหลาม 2 , zip
กลับรายการของ tuples นี่เป็นสิ่งที่ดีเมื่อfooและbarไม่ใหญ่ หากทั้งคู่มีขนาดใหญ่แล้วการขึ้นรูปzip(foo,bar)เป็นตัวแปรชั่วคราวที่มีขนาดใหญ่เกินความจำเป็นและควรถูกแทนที่ด้วยitertools.izipหรือ
itertools.izip_longestซึ่งจะส่งคืนตัววนซ้ำแทนรายการ
import itertools
for f,b in itertools.izip(foo,bar):
print(f,b)
for f,b in itertools.izip_longest(foo,bar):
print(f,b)
izipหยุดเมื่อใดfooหรือbarหมด
izip_longestหยุดเมื่อทั้งสองfooและbarหมด เมื่อตัววนซ้ำที่สั้นลงหมดลงizip_longestจะให้ผลลัพธ์เป็น tuple Noneในตำแหน่งที่สอดคล้องกับตัววนซ้ำนั้น คุณสามารถตั้งค่าfillvalueอื่นนอกเหนือจากที่Noneคุณต้องการ ดูที่นี่สำหรับเรื่องราวทั้งหมด
โปรดทราบว่าzipและzipพี่น้องที่คล้ายกันของมันสามารถยอมรับจำนวน iterables โดยพลการเป็นข้อโต้แย้ง ตัวอย่างเช่น,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
พิมพ์
1 red manchego
2 blue stilton
3 green brie
izipหนึ่งวิธี (แม้ว่าizip/zipดูจะดูดีกว่า)?