在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也首先出现。
为了解决这个问题,我们将遵循以下步骤 –
- 定义一个比较函数,它需要一个数字n
- 这将返回配对(二进制形式的n中的1数,n的值)
- 通过将每个值传入比较函数进行比较,对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]