การคูณลิสต์ซ้อน (list of lists) กับลิสต์อีกชุดหนึ่งเป็นสิ่งที่พบได้บ่อยในงานวิเคราะห์ข้อมูล บทความนี้จะแสดง 2 วิธีการทำ: ใช้ลูป for ซ้อน และใช้ enumerate()
วิธีที่ 1: ใช้ลูป for ซ้อน (Nested Loops)
ใช้ลูป for 2 ชั้น: ลูปนอกวนดัชนีของลิสต์หลัก ลูปในวนดัชนีของแต่ละลิสต์ย่อย คูณค่าจากลิสต์ตัวคูณ (multipliers) กับค่าในลิสต์ย่อยที่ตรงตำแหน่ง
ตัวอย่างโค้ด
listA = [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
multipliers = [5, 11, 0]
print("The given list: ", listA)
print("Multiplier list: ", multipliers)
# ใช้ลูปซ้อน
res = [[] for idx in range(len(listA))]
for i in range(len(listA)):
for j in range(len(multipliers)):
res[i] += [multipliers[i] * listA[i][j]]
print("Result of multiplication: ", res)
ผลลัพธ์
The given list: [[2, 11, 5], [3, 2, 8], [11, 9, 8]] Multiplier list: [5, 11, 0] Result of multiplication: [[10, 55, 25], [33, 22, 88], [0, 0, 0]]
วิธีที่ 2: ใช้ enumerate() (กระชับกว่า)
enumerate() ช่วยให้เข้าถึงทั้งดัชนีและค่าของลิสต์ย่อยได้โดยตรง ทำให้โค้ดสั้นและอ่านง่ายขึ้น
ตัวอย่างโค้ด
listA = [[2, 11, 5], [3, 2, 8], [11, 9, 8]]
multipliers = [5, 11, 0]
print("The given list: " + str(listA))
print("Multiplier list: ", multipliers)
# ใช้ enumerate
res = [[multipliers[i] * j for j in x] for i, x in enumerate(listA)]
print("Result of multiplication: ", res)
ผลลัพธ์
The given list: [[2, 11, 5], [3, 2, 8], [11, 9, 8]] Multiplier list: [5, 11, 0] Result of multiplication: [[10, 55, 25], [33, 22, 88], [0, 0, 0]]
สรุป: ทั้งสองวิธีให้ผลลัพธ์เหมือนกัน แต่วิธี enumerate() เขียนกระชับกว่าและเป็น Pythonic มากกว่า เหมาะสำหรับโค้ดที่ต้องการความสะอาดและอ่านง่าย