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]
廣告