โจทย์: ให้ลิสต์ของลิสต์ (Matrix) ทุก sublist ยาวเท่ากัน ต้องการจัดกลุ่มสมาชิก Index เดียวกันจากทุก sublist (Matrix Transpose)
Input/Output
Input: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] Output: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
วิธีที่ 1: ใช้ Nested Loop (Manual)
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = []
index = 0
for i in range(len(lists[0])):
result.append([])
for j in range(len(lists)):
result[index].append(lists[j][index])
index += 1
print(result)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
วิธีที่ 2: ใช้ zip() + * Unpacking (แนะนำ - Pythonic)
zip(*lists) Unpack ลิสต์หลักเป็น arguments ให้ zip จับคู่ Index เดียวกัน
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(list(zip(*lists)))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
วิธีที่ 3: ใช้ zip() + map(list, ...) เพื่อได้ List แทน Tuple
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(list(map(list, zip(*lists))))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
สรุป: zip(*matrix) เป็นวิธีมาตรฐานสำหรับ Matrix Transpose ใน Python ใช้ได้กับ Iterable ใดๆ ที่มีความยาวเท่ากัน