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

การจัดกลุ่มสมาชิก Index เดียวกันจากหลายลิสต์ (Transpose) ใน Python

โจทย์: ให้ลิสต์ของลิสต์ (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 ใดๆ ที่มีความยาวเท่ากัน