Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình sắp xếp các số dựa trên 1 số đếm trong biểu diễn nhị phân của chúng bằng Python

Giả sử chúng ta có một danh sách các số trong nums. Chúng ta phải sắp xếp danh sách theo thứ tự tăng dần theo số lượng 1 có trong biểu diễn nhị phân cho mỗi số. Nếu hai số có cùng số 1, thì hãy sắp xếp chúng dựa trên giá trị của chúng.

Vì vậy, nếu đầu vào là nums =[4, 1, 12, 7, 6], thì đầu ra sẽ là [1, 4, 6, 12, 7], bởi vì -

  • Dạng nhị phân của 4 là 0100
  • Dạng nhị phân của 1 là 0001
  • Dạng nhị phân của 6 là 0110
  • Dạng nhị phân của 12 là 1100
  • Dạng nhị phân của 7 là 0111

Vì vậy, cách sắp xếp là [1, 4, 6, 12, 7], 1 đến trước vì giá trị của nó nhỏ hơn, cũng như 6 đến trước vì cùng lý do này.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • xác định một so sánh hàm, điều này nhận một số n
  • hàm này trả về một cặp p với (1 số đếm ở dạng nhị phân của n, giá trị của n)
  • Sắp xếp các số bằng cách chuyển từng giá trị vào hàm so sánh trước khi so sánh
  • trả về số.

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

def solve(nums):
   nums.sort(key=lambda num: (bin(num).count("1"), num))
   return nums

nums = [4, 1, 12, 7, 6]
print(solve(nums))

Đầu vào

[4, 1, 12, 7, 6]

Đầu ra

[1, 4, 6, 12, 7]