แหล่งที่ดีที่สุดของข้อมูลที่เป็นทางการกวดวิชาหลามบน comprehensions ความเข้าใจในรายการเกือบจะเหมือนกับการวนซ้ำ (แน่นอนว่าความเข้าใจในรายการใด ๆ สามารถเขียนเป็น for-loop ได้) แต่มักจะเร็วกว่าการใช้ for loop
ดูการทำความเข้าใจรายการที่ยาวขึ้นนี้จากบทช่วยสอน ( if
ส่วนนี้จะกรองความเข้าใจเฉพาะส่วนที่ผ่านคำสั่ง if เท่านั้นที่จะถูกส่งไปยังส่วนสุดท้ายของการทำความเข้าใจรายการ (ที่นี่(x,y)
):
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
มันเหมือนกับสิ่งนี้ที่ซ้อนกันสำหรับลูป (และตามที่บทช่วยสอนบอกให้สังเกตว่าลำดับของ for และ if เหมือนกันอย่างไร)
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
ความแตกต่างที่สำคัญระหว่างความเข้าใจในรายการและสำหรับลูปคือส่วนสุดท้ายของ for loop (ที่คุณทำอะไรบางอย่าง) มาที่จุดเริ่มต้นแทนที่จะเป็นตอนท้าย
สำหรับคำถามของคุณ:
ออบเจ็กต์ต้องเป็นประเภทใดจึงจะใช้โครงสร้างลูป
ทำซ้ำได้ วัตถุใด ๆ ที่สามารถสร้างชุดองค์ประกอบ (จำกัด ) ซึ่งรวมถึงคอนเทนเนอร์รายการชุดเครื่องกำเนิดไฟฟ้า ฯลฯ
ลำดับที่ i และ j กำหนดให้กับองค์ประกอบในออบเจ็กต์คืออะไร
พวกเขาถูกกำหนดในลำดับเดียวกันกับที่สร้างขึ้นจากแต่ละรายการราวกับว่าพวกมันอยู่ในวงซ้อนสำหรับลูป (สำหรับความเข้าใจครั้งแรกของคุณคุณจะได้รับ 1 องค์ประกอบสำหรับ i จากนั้นทุกค่าจาก j, องค์ประกอบที่ 2 เป็น i, จากนั้นทุกค่าจาก j ฯลฯ )
สามารถจำลองโดยใช้โครงสร้างลูปที่แตกต่างกันได้หรือไม่?
ใช่แสดงไว้แล้วด้านบน
สิ่งนี้สำหรับลูปสามารถซ้อนด้วยโครงสร้างที่คล้ายกันหรือต่างกันสำหรับลูปได้หรือไม่? แล้วหน้าตาจะเป็นยังไง?
แน่นอน แต่ไม่ใช่ความคิดที่ดี ตัวอย่างเช่นที่นี่จะให้รายชื่อตัวละคร:
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]