Nested list comprehensions
ยอดเยี่ยม! ตอนนี้คุณเข้าใจรูปแบบพื้นฐานของ list comprehensions เป็นอย่างดีแล้ว ลองยกระดับทักษะการเขียนโค้ดขึ้นอีกขั้นกัน ในแบบฝึกหัดนี้ เราจะเขียน list comprehension ซ้อนอยู่ภายใน list comprehension อีกตัวหนึ่ง หรือที่เรียกว่า nested list comprehensions ฟังดูซับซ้อนนิดหน่อย แต่ทำได้แน่นอน!
คราวนี้ขอพักเรื่อง string ไว้ก่อน แล้วมาดูการใช้ list เพื่อแทนออบเจ็กต์หลายมิติ เช่น เมทริกซ์ กัน ใน Python สามารถแทนเมทริกซ์ได้ด้วย list ของ list ตัวอย่างเช่น เมทริกซ์ขนาด 5 x 5 ที่แต่ละแถวมีค่าตั้งแต่ 0 ถึง 4 เขียนได้ดังนี้:
matrix = [[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]
โจทย์ของคุณคือสร้างเมทริกซ์นี้ขึ้นมาใหม่โดยใช้ nested list comprehensions โดยสร้างแต่ละแถวของเมทริกซ์ด้วย list comprehension ตัวเดียว แล้วนำ list comprehension นั้นไปเป็น output expression ของ list comprehension ภายนอก เพื่อสร้าง list ของ list:
[[output expression] for iterator variable in iterable]
สังเกตว่าในที่นี้ output expression เองก็เป็น list comprehension อีกตัวหนึ่ง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python Toolbox
คำแนะนำการฝึกหัด
- ใน list comprehension ด้านใน ซึ่งก็คือ output expression ของ nested list comprehension ให้สร้าง list ของค่าตั้งแต่
0ถึง4โดยใช้range()และใช้colเป็น iterator variable - ในส่วน iterable ของ nested list comprehension ให้ใช้
range()เพื่อนับ 5 แถว กล่าวคือสร้าง list ของค่าตั้งแต่0ถึง4โดยใช้rowเป็น iterator variable โดยจะไม่ต้องใช้ตัวแปรนี้ในการสร้างค่าภายใน list of lists
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a 5 x 5 matrix using a list of lists: matrix
matrix = [[____] ____]
# Print the matrix
for row in matrix:
print(row)