Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python: สร้าง Nested List ที่มีค่าซ้ำตามจำนวน Index

บทนำ

โปรแกรมสาธิตการสร้าง 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 แบบสามเหลี่ยมได้อย่างกระชับ ค่าต้นทางในลิสต์ไม่ได้ถูกใช้งาน (ถูกแทนที่ทั้งหมด) จึงเป็นแค่การสร้างโครงสร้างข้อมูลใหม่