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
ดูจะดูดีกว่า)?