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。

示例

让我们看一下下面的实现,以便更好地理解:

Open Compiler
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]

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

[1, 4, 6, 12, 7]

更新于:2021年10月14日

5K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告