zoukankan      html  css  js  c++  java
  • 1356. 根据数字二进制下 1 的数目排序

     

    sort()函数:

      sort()函数是原址排序,字符串、元组没有sort()方法——因为均不可修改。

      如果需要一个排序好的副本,同时保持原有列表不变,可以这样操作:

    1   x =[4, 6, 2, 1, 7, 9]
    2 
    3   y = x[ : ]
    4 
    5   y.sort()

      注:y = x[ : ] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y(y = x),y和x还是指向同一个列表,并没有产生新的副本。

      实例:sort(key, reverse=False)

      参数列表:

      key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序;

      reverse是排序规则,默认false(升序排列),true(降序排列)。

     

     sorted()函数

      sorted()用于对可迭代对象进行排序(可迭代对象包括列表、字典、set、甚至是字符串)。

      sorted()排序会保留原list。

      实例:sorted(arr, cmp=None, key=lambda num: (bin(num)[2:].count('1'), num), reverse=False)

      参数列表:

      arr是可迭代对象;

      cmp -- 可以自定义的比较函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

      key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。上例中有两个排序依据:首先是arr中各元素取二进制,其中‘1’字符的个数,其次是元素本身的数值大小——即将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列;

      reverse是排序规则,默认false(升序排列),true(降序排列)。

      返回值:排好序的list——set经sorted()后也返回list。

     

     python中的进制转换内置函数

    本题有两个排序条件:

    二进制中‘1’的个数、十进制数值大小,因此用sort()和sorted()都可实现。

    代码如下。

     1 class Solution(object):
     2     def sortByBits(self, arr):
     3         """
     4         :type arr: List[int]
     5         :rtype: List[int]
     6         """
     7         arr.sort(key=lambda num: (bin(num)[2:].count('1'), num), reverse=False)
     8         return arr
     9 
    10     def sortByBits2(self, arr):
    11         """
    12         :type arr: List[int]
    13         :rtype: List[int]
    14         """
    15         return sorted(arr, key=lambda num: (bin(num)[2:].count('1'), num), reverse=False)
    16 
    17 
    18 if __name__ == '__main__':
    19     solution = Solution()
    20     print(solution.sortByBits(arr=[0, 1, 7, 8, 2, 3, 4, 5, 6]))
  • 相关阅读:
    vs2017 离线安装。
    c# begin & end.
    vc++ 下的WaitForSingleObject
    c# 工厂模式 ,委托 ,事件。
    微信分享 andriod studio
    mac osx 10.9 ftp server端口
    win32 调用多媒体函数PlaySound()
    [汇编语言]-第九章 在屏幕中间分别显示绿底红色,白底蓝色字符串"welcome to masm!"
    [汇编语言]-第九章 jcxz,loop指令,转移位移的意义
    补码
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12712756.html
Copyright © 2011-2022 走看看