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

การเรียงคอลัมน์ของมาทริกซ์ใน Python

ภาพรวม

โจทย์เรียงลำดับคอลัมน์ของมาทริกซ์จากน้อยไปมาก (ascending) โดยแต่ละคอลัมน์เรียงแยกกัน

ตัวอย่าง

อินพุต:

[[11, 21, 31],
 [6,  6,  4],
 [1,  11, 8]]

คอลัมน์ 0: [11,6,1] → [1,6,11]

คอลัมน์ 1: [21,6,11] → [6,11,21]

คอลัมน์ 2: [31,4,8] → [4,8,31]

เอาต์พุต:

[[1, 6, 4],
 [6, 11, 8],
 [11, 21, 31]]

โค้ด Python

class Solution:
    def solve(self, matrix):
        R = len(matrix)
        C = len(matrix[0])
        res = [[0] * C for _ in range(R)]
        for col in range(C):
            values = [r[col] for r in matrix]
            values.sort(reverse=True)
            for row in range(R):
                res[row][col] = values.pop()
        return res

ob = Solution()
matrix = [[11, 21, 31], [6, 6, 4], [1, 11, 8]]
print(ob.solve(matrix))

วิธีเขียนสั้นกว่า (zip + sorted)

def sort_columns(matrix):
    return [list(row) for row in zip(*[sorted(col) for col in zip(*matrix)])]

อธิบาย

  1. zip(*matrix) ทรานสโปส (แถว↔คอลัมน์)
  2. เรียงแต่ละคอลัมน์
  3. zip(*...) ทรานสโปสกลับ

ผลลัพธ์

[[1, 6, 4], [6, 11, 8], [11, 21, 31]]