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

การคูณลิสต์ซ้อน (Nested List) ด้วยลิสต์อีกชุดหนึ่งใน Python

การคูณลิสต์ซ้อน (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 มากกว่า เหมาะสำหรับโค้ดที่ต้องการความสะอาดและอ่านง่าย