ความแตกต่างของ zip iterator และรายการ [ซ้ำกัน]

ฉันมีรายการชื่อ 'A' และมีตัววนซ้ำชื่อ 'B' 'B' เป็นตัววนซ้ำของ 'A'

A = [1, 2, 3, 4, 5, 6, 7, 8, 9]

B = iter(A)

ผลลัพธ์ของ zip(A,A,A) คือ

[(0, 0, 0),
 (1, 1, 1),
 (2, 2, 2),
 (3, 3, 3),
 (4, 4, 4),
 (5, 5, 5),
 (6, 6, 6),
 (7, 7, 7),
 (8, 8, 8)]

ผลลัพธ์ของ zip(B, B, B) คือ

[(0, 1, 2), (3, 4, 5), (6, 7, 8)]

ใครสามารถอธิบายความแตกต่างได้บ้าง


person Arun    schedule 19.12.2018    source แหล่งที่มา


คำตอบ (1)


มันง่ายมาก zipทำงานอย่างไร? มันสร้างตัววนซ้ำสำหรับแต่ละองค์ประกอบซิปและดำเนินการผ่านองค์ประกอบเหล่านั้น

เมื่อคุณผ่าน zip(A,A,A) มันจะสร้างตัววนซ้ำ 3 ตัว โดยแต่ละตัวจะเริ่มจาก A[0]

เมื่อคุณผ่าน zip(B,B,B) คุณจะมีตัววนซ้ำแล้ว หากต้องการสร้างองค์ประกอบแรกของลำดับผลลัพธ์ จะเรียก B.__iter__() 3 ครั้ง คุณจะได้ 0,1,2 สำหรับองค์ประกอบที่สอง จะเรียก B.__iter() อีกครั้ง 3 ครั้ง จึงได้รับ 3,4,5 ไปเรื่อยๆ

person grapes    schedule 19.12.2018
comment
จริงๆ แล้ว zip ไม่ได้สร้างตัววนซ้ำสำหรับแต่ละองค์ประกอบซิป - person DYZ; 19.12.2018