Python程式:基於二進位制表示中1的個數對數字進行排序


假設我們有一個名為nums的數字列表。我們需要根據每個數字的二進位制表示中1的個數,對列表進行升序排序。如果兩個數字具有相同的1的個數,則根據它們的值進行排序。

因此,如果輸入類似於nums = [4, 1, 12, 7, 6],則輸出將為[1, 4, 6, 12, 7],因為:

  • 4的二進位制形式為0100
  • 1的二進位制形式為0001
  • 6的二進位制形式為0110
  • 12的二進位制形式為1100
  • 7的二進位制形式為0111

因此,排序結果為[1, 4, 6, 12, 7],1排在第一位,因為它的值較小,6也出於同樣的原因排在前面。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個名為compare的函式,它接收一個數字n作為引數。
  • 該函式返回一個包含兩個元素的元組p:(n的二進位制形式中1的個數,n的值)。
  • 透過在比較之前將每個值傳遞到compare函式,對nums進行排序。
  • 返回nums。

示例

讓我們看一下下面的實現,以便更好地理解:

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

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

輸入

[4, 1, 12, 7, 6]

輸出

[1, 4, 6, 12, 7]

更新於:2021年10月14日

5K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告