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

Python – Sắp xếp danh sách theo số lượng ước số (Factor count)

Sắp xếp danh sách số nguyên theo số lượng ước số (factor count) của mỗi số. Sử dụng hàm key với list comprehension và modulus.

Mã nguồn

def factor_count(element):
    # Đếm ước số từ 1 đến element-1 (không kể chính nó)
    return len([element for index in range(1, element) if element % index == 0])

my_list = [121, 1120, 13540, 221, 1400]
print("Danh sách gốc:", my_list)

my_list.sort(key=factor_count)
print("Danh sách sau sắp xếp:", my_list)

Kết quả

Danh sách gốc: [121, 1120, 13540, 221, 1400]
Danh sách sau sắp xếp: [121, 221, 13540, 1120, 1400]

Giải thích

  • factor_count(n) đếm số index trong range(1, n) chia hết cho n (sai logic: nên là n % index == 0).
  • Code gốc: element % index == 0 với element là tham số hàm, index là biến lặp → đúng: đếm ước của element.
  • 121: ước {1, 11} → 2 ước.
  • 221: ước {1, 13, 17} → 3 ước.
  • 13540, 1120, 1400: nhiều ước hơn → đứng sau.

Sửa lỗi logic nhỏ

Hàm parameter tên element nhưng list comprehension dùng element làm giá trị lặp → shadowing. Nên đổi tên:


def factor_count(n):
    return len([i for i in range(1, n) if n % i == 0])

Hoặc tối ưu: chỉ lặp đến sqrt(n).