บทนำ
โปรแกรมสาธิตการสร้าง nested list โดยแต่ละสับรายการมีค่าเท่ากับ index+1 ซ้ำ index+1 ครั้ง
ตัวอย่างโค้ด
my_list = [11, 25, 36, 24]
print("ลิสต์ต้นทาง:", my_list)
for i in range(len(my_list)):
# สร้างลิสต์ใหม่: ค่า i+1 ซ้ำ i+1 ครั้ง
my_list[i] = [i + 1 for _ in range(i + 1)]
print("ผลลัพธ์:", my_list)
ผลลัพธ์
ลิสต์ต้นทาง: [11, 25, 36, 24]
ผลลัพธ์: [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
คำอธิบาย
- Index 0: ค่า 1 ซ้ำ 1 ครั้ง → [1]
- Index 1: ค่า 2 ซ้ำ 2 ครั้ง → [2, 2]
- Index 2: ค่า 3 ซ้ำ 3 ครั้ง → [3, 3, 3]
- Index 3: ค่า 4 ซ้ำ 4 ครั้ง → [4, 4, 4, 4]
รูปแบบทั่วไป (General Pattern)
def create_triangular_nested(n, value_func=lambda i: i+1):
"""สร้าง nested list รูปสามเหลี่ยม
n: จำนวนแถว
value_func: ฟังก์ชันคำนวณค่าจาก index
"""
return [[value_func(i)] * (i + 1) for i in range(n)]
# ตัวอย่าง
print(create_triangular_nested(5))
# [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5]]
print(create_triangular_nested(4, lambda i: chr(65+i)))
# [['A'], ['B', 'B'], ['C', 'C', 'C'], ['D', 'D', 'D', 'D']]
การประยุกต์: Pascal's Triangle
def pascal_triangle(n):
"""สร้าง Pascal's Triangle แบบ nested list"""
result = []
for i in range(n):
row = [1] * (i + 1)
for j in range(1, i):
row[j] = result[i-1][j-1] + result[i-1][j]
result.append(row)
return result
print(pascal_triangle(5))
# [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
สรุป
ใช้ list comprehension [[i+1] * (i+1) for i in range(n)] สร้าง nested list แบบสามเหลี่ยมได้อย่างกระชับ ค่าต้นทางในลิสต์ไม่ได้ถูกใช้งาน (ถูกแทนที่ทั้งหมด) จึงเป็นแค่การสร้างโครงสร้างข้อมูลใหม่