sort()函数:
如果需要一个排序好的副本,同时保持原有列表不变,可以这样操作:
1 x =[4, 6, 2, 1, 7, 9] 2 3 y = x[ : ] 4 5 y.sort()
实例:sort(key, reverse=False)
参数列表:
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序;
sorted()函数
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]))