Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python – Sắp xếp ma trận theo tần suất None

Sắp xếp các hàng của ma trận (danh sách lồng) theo số lượng giá trị None trong mỗi hàng. Sử dụng list comprehension, not và len() trong hàm key.

Mã nguồn

def get_None_freq(row):
    # Đếm số phần tử falsy (None, 0, '', False, etc.) - nhưng ở đây chỉ None
    return len([element for element in row if not element])

my_list = [[None, 24], [None, 33, 3, None], [42, 24, 55], [13, None, 24]]
print("Ma trận gốc:", my_list)

my_list.sort(key=get_None_freq)
print("Ma trận sau sắp xếp:", my_list)

Kết quả

Ma trận gốc: [[None, 24], [None, 33, 3, None], [42, 24, 55], [13, None, 24]]
Ma trận sau sắp xếp: [[42, 24, 55], [None, 24], [13, None, 24], [None, 33, 3, None]]

Giải thích

  • if not element coi None là True (và cả 0, '', False...).
  • Hàng [42, 24, 55]: 0 None → đầu tiên.
  • Hàng [None, 24] và [13, None, 24]: 1 None → giữ thứ tự gốc (stable).
  • Hàng [None, 33, 3, None]: 2 None → cuối cùng.

Chỉ đếm None chính xác

def get_None_freq_exact(row):
    return len([e for e in row if e is None])

Dùng is None thay vì not element để tránh nhầm lẫn với 0, chuỗi rỗng, False.